c#多线程之信号量的使用方法

  介绍

这篇文章主要介绍了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#多线程之信号量的使用方法