ManualResetEvent和AutoResetEvent是.NET Framework中的兩種事件處理類,它們都用于實現線程之間的同步。
- ManualResetEvent:
- 當ManualResetEvent的信號量為true時,所有等待的線程都會被喚醒。
- 當ManualResetEvent的信號量為false時,所有等待的線程都會被阻塞,直到信號量被手動設置為true。
- 一旦一個線程被喚醒,ManualResetEvent的信號量會自動重置為false,即使線程沒有執行完。
- 適用于一次性事件的同步,例如某個任務完成時通知其他線程。
- AutoResetEvent:
- 當AutoResetEvent的信號量為true時,只有一個等待的線程會被喚醒,其他線程仍然會保持阻塞。
- 當被喚醒的線程執行完后,AutoResetEvent的信號量會自動重置為false,其他線程可以被喚醒。
- 適用于重復性事件的同步,例如資源的競爭訪問。
總結:
- ManualResetEvent適用于一次性事件的同步,所有等待的線程都會被喚醒。
- AutoResetEvent適用于重復性事件的同步,只有一個等待的線程會被喚醒。