Semaphore:可理解為允許線程執行信號的池子,池子中放入多少個信號就允許多少線程同時執行。 ...
Semaphore:可理解為允許線程執行信號的池子,池子中放入多少個信號就允許多少線程同時執行。
1 private static void MultiThreadSynergicWithSemaphore() 2 { 3 //0表示創建Semaphore時,擁有可用信號量數值 4 //1表示Semaphore中,最多容納信號量數值 5 Semaphore semaphore = new Semaphore(0, 1); 6 7 8 Thread thread1 = new Thread(() => 9 { 10 //線程首先WaitOne等待一個可用的信號量 11 semaphore.WaitOne(); 12 //在得到信號量後,執行下麵代碼內容 13 Console.WriteLine("thread1 work"); 14 Thread.Sleep(5000); 15 //線程執行完畢,將獲得信號量釋放(還給semaphore) 16 semaphore.Release(); 17 }); 18 19 20 Thread thread2 = new Thread(() => 21 { 22 semaphore.WaitOne(); 23 Console.WriteLine("thread2 work"); 24 Thread.Sleep(5000); 25 semaphore.Release(); 26 }); 27 thread2.Start(); 28 thread1.Start(); 29 //因在創建Semaphore時擁有的信號量為0 30 //semaphore.Release(1) 為加入1個信號量到semaphore中 31 semaphore.Release(1); 32 }
說明:
1、如果semaphore.Release(n),n>semaphore最大容納信號量,將出異常。
2、當semaphore擁有的信號量為1時,Semaphore相當於Mutex
3、當semaphore擁有的信號量>1時,信號量的數量即可供多個線程同時獲取的個數,此時可認為獲取到信號量的線程將同時執行(實際情況可能與CPU核心數、CPU同時支出線程數有關)