首页 > 代码库 > C#多线程间的同步问题
C#多线程间的同步问题
使用线程时最头痛的就是共享资源的同步问题,处理不好会得到错误的结果,C#处理共享资源有以下几种:
1、lock锁
2、Mutex类
3、semaphore
其中lock 和mutex 差不多,都是锁定同一个资源,不同之处mutex在整个进程中都可以访问到。
semaphore是锁定多个资源,比如同一时期只能有两个线程访问,其它线程只能等待其中之一释放锁才能使用,Semaphore就是一个可以多次进入的“Mutex”。Mutex永远只允许一个线程拥有它,而Semaphore可以允许多个线程请求,因此Semaphore被用于管理一次可以允许多个线程进入并发访问资源的情况。
比如:
class Program { static Semaphore sp = new Semaphore(2,2); static void Main(string[] args) { DoWork(); Console.Read(); } private static void DoWork() { for (int i = 0; i < 10; i++) { Task.Run(() => { sp.WaitOne(); Console.WriteLine("线程:"+Thread.CurrentThread.ManagedThreadId+",开始运行"); Thread.Sleep(new Random().Next(1000)); Console.WriteLine("线程:" + Thread.CurrentThread.ManagedThreadId + ",结束此运行"); sp.Release(); }); } } }
C#多线程间的同步问题
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。