c# 多线程同步 怎么样顺序排队执行

.Net技术 码拜 8年前 (2016-09-24) 5004次浏览
多线程环境下,怎么样同时只允许N个线程访问?为描述方便,以下以只允许一个线程示例。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
namespace test1
{
    class Program
    {
        static Semaphore semaphore = new Semaphore(1, 1); //同时只允许一线程
        static void Main(string[] args)
        {
            for (int i = 0; i < 10; i++)
            { 
                new Thread(new ParameterizedThreadStart(Work)).Start(i);
                
            }
            Console.Read();
        }
        private static void Work(object i)
        {
            semaphore.WaitOne();
            Console.WriteLine("本人是线程:{0}", (int)i);
            Thread.Sleep(100);   //避免线程瞬间执行完成
            semaphore.Release();
        
        }
    }
}

以上代码,执行结果并不会按照1,2,3……10 的顺序执行,也就是当需要等待的时候,进入的线程并不会排队。怎么样实现排队呢?
使用ThreadPool类会顺序执行,但不能创建多个线程池,而且最小线程数不能小于cpu核数,不是很好用。
问一下大家还有没有其他好的实现方法,谢谢。

解决方案

20

c# 多线程同步 怎么样顺序排队执行
你让线程排队做啥,那还不如用同步方式,
线程是无序的,只能是取数据时排队,而不是让线程执行的方式排队
你想让他排,那只能用

 for (int i = 0; i < 10; i++)
{ 
           Thread t= new Thread(new ParameterizedThreadStart(Work));
           t.Start(i);
           t.Join();
                 
}

80


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明c# 多线程同步 怎么样顺序排队执行
喜欢 (1)
[1034331897@qq.com]
分享 (0)