溫馨提示×

C# ManualResetEvent等待機制是什么

c#
小樊
82
2024-10-12 08:41:59
欄目: 編程語言

ManualResetEvent 是 C# 中的一個同步原語,它提供了一種方式,使得多個線程可以等待某個事件的發(fā)生。ManualResetEvent 的名字中的 “manual” 指的是這個事件的狀態(tài)(是否被重置)是由代碼來控制的,而不是由事件自動完成的。

ManualResetEvent 的基本用法如下:

ManualResetEvent manualResetEvent = new ManualResetEvent(false);

// 線程1:等待事件發(fā)生
manualResetEvent.WaitOne();

// 線程2:設置事件狀態(tài),喚醒等待的線程
manualResetEvent.Set();

在這個例子中,ManualResetEvent 初始化為 false,表示事件的初始狀態(tài)是不發(fā)生的。線程1調用 WaitOne 方法時,它會阻塞,直到事件被設置為 true。線程2調用 Set 方法時,它會設置事件的狀態(tài)為 true,從而喚醒等待的線程1。

需要注意的是,如果多個線程在調用 WaitOne 方法時被阻塞,那么當線程2調用 Set 方法時,只有其中一個線程會被喚醒。其他線程仍然會保持阻塞狀態(tài),直到它們再次調用 WaitOne 方法。這是因為 ManualResetEvent 只會喚醒一個等待的線程。

另外,ManualResetEvent 還提供了一個 Reset 方法,用于將事件的狀態(tài)重置為 false。這樣,當被喚醒的線程再次調用 WaitOne 方法時,它會發(fā)現(xiàn)事件仍然處于未發(fā)生的狀態(tài),并再次進入阻塞狀態(tài)。

總的來說,ManualResetEvent 的等待機制是一種基于事件的同步機制,它允許多個線程等待某個事件的發(fā)生,并在事件發(fā)生時喚醒等待的線程。

0