天天看點

關于AutoResetEvent和ManualResetEvent的一點想法

AutoResetEvent和ManualResetEvent主要用于線程間的通信,就是在一個線程的合适執行位置通知另一個線程(此時已經是阻塞狀态)可以不在阻塞繼續往下執行了。

首先從名字上來說這兩個類的最大差別有兩個地方,一個是在Reset(複位)的方式上,一個是自動,一個是手動(當然是廢話)

第二個地方:如果是自動置位(複位)事件,當有多個線程同時等待它的set事件,此時獲得非阻塞權限的線程是不定的,也就是說此時AutoResetEvent隻能 随機給其中一個發送信号。

下面就需要了解它們的幾個主要方法

WaitOne 方法:阻塞目前線程,同時等待線程的set信号

set方法: 将事件設定為true狀态(假使開始是阻塞狀态即為flase狀态初始化),等待線程可以繼續執行;

reset方法:AutoResetEvent 在set後自動恢複為reset狀态(flase情況),ManualResetEvent可以在合适的位置調用reset重新将控制線程阻塞();