介绍
这篇文章主要介绍了c#多线程之信号量的使用方法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获、下面让小编带着大家一起了解一下。
信号量:可理解为允许线程执行信号的池子,池子中放入多少个信号就允许多少线程同时执行。
private static void MultiThreadSynergicWithSemaphore () {才能 ,,//0表示创建信号量时,拥有可用信号量数的值 ,,//1表示信号量中,最多容纳信号量数的值 ,,Semaphore Semaphore =, new 信号量(0,1); ,,Thread thread1 =, new 线程((),=比; ,,{ ,,,//线程首先WaitOne等待一个可用的信号量 ,,,semaphore.WaitOne (); ,,,//在得到信号量后,执行下面代码内容 ,,,Console.WriteLine (“thread1 已经做完); ,,,thread . sleep (5000); ,,,//线程执行完毕,将获得信号量释放(还给信号量) ,,,semaphore.Release (); ,,}); ,,Thread thread2 =, new 线程((),=比; ,,{ ,,,semaphore.WaitOne (); ,,,Console.WriteLine (“thread2 已经做完); ,,,thread . sleep (5000); ,,,semaphore.Release (); ,,}); ,,thread2.Start (); ,,thread1.Start (); ,,//因在创建信号时拥有的信号量为0 ,,//semaphore.Release(1),为加入1个信号量到信号量中 ,,semaphore.Release (1); 以前,,}>说明:
1,如果semaphore.Release (n), n>信号最大容纳信号量,将出异常。
2,当信号拥有的信号量为1时,信号量相当于互斥
3,当信号拥有的信号量在1时,信号量的数量即可供多个线程同时获取的个数,此时可认为获取到信号量的线程将同时执行(实际情况可能与CPU核心数,CPU同时支出线程数有关)c#多线程之信号量的使用方法