CLR via C# 讀書筆記 3-2 AutoResetEvent ManualResetEvent 和Semaphore
這三個對象都經常用于線程同步
下面是一些他們的異同點
1.當多個線程在等待一個 AutoResetEvent的時候,每次調用AutoResetEvent.Set()方法只會喚醒一個線程
2.當多個線程在等待一個ManualResetEvent的時候,每次調用ManualResetEvent.Set()方法會喚醒所有等待的線程
3.當多個線程在等待一個Semaphore的時候,每次調用Semaphore.Release(Int releaseCount)的時候 將喚醒releaseCount個線程
如果調用的是Semaphore.Release() 那么相當于Semaphore.Release(1);
4.AutoResetEvent可以多次調用 Set方法,而Semaphore在每次被調用Release方法的時候會計數,如果這個數字超過了最大限制 ,那么會拋出一個SemaphoreFullException(最大數值可以在構造函數中確定 maximumCount)
using System;
using System.Threading;
public sealed class Semaphore : WaitHandle
{
public Semaphore(Int32 initialCount, Int32 maximumCount);
public Int32 Release(); // Calls Release(1); returns previous count
public Int32 Release(Int32 releaseCount); // Returns previous count
}
浙公網安備 33010602011771號