這篇文章主要為大家詳細介紹了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中文網其他相關文章!