首頁  >  文章  >  後端開發  >  C#多線程之Semaphore的使用詳解

C#多線程之Semaphore的使用詳解

黄舟
黄舟原創
2017-09-02 14:28:072486瀏覽

這篇文章主要為大家詳細介紹了C#多線程之Semaphore用法,具有一定的參考價值,有興趣的小伙伴們可以參考一下

Semaphore:可理解為允許線程執行信號的池子,池子放入多少個訊號就允許多少執行緒同時執行。


private static void MultiThreadSynergicWithSemaphore()
  {
   //0表示创建Semaphore时,拥有可用信号量数值
   //1表示Semaphore中,最多容纳信号量数值
   Semaphore semaphore = new Semaphore(0, 1);


   Thread thread1 = new Thread(() =>
   {
    //线程首先WaitOne等待一个可用的信号量
    semaphore.WaitOne();
    //在得到信号量后,执行下面代码内容
    Console.WriteLine("thread1 work");
    Thread.Sleep(5000);
    //线程执行完毕,将获得信号量释放(还给semaphore)
    semaphore.Release();
   });


   Thread thread2 = new Thread(() =>
   {
    semaphore.WaitOne();
    Console.WriteLine("thread2 work");
    Thread.Sleep(5000);
    semaphore.Release();
   });
   thread2.Start();
   thread1.Start();
   //因在创建Semaphore时拥有的信号量为0
   //semaphore.Release(1) 为加入1个信号量到semaphore中
   semaphore.Release(1);
  }

說明:

1、如果semaphore.Release(n),n>semaphore最大容納訊號量,將會出異常。
2、當semaphore擁有的信號量為1時,Semaphore相當於Mutex
3、當semaphore擁有的信號量>1時,信號量的數量即可供多個線程同時獲取的個數,此時可認為取得到信號量的執行緒將同時執行(實際情況可能與CPU核心數、CPU同時支出執行緒數有關)

以上是C#多線程之Semaphore的使用詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn