執行緒同步 AutoResetEvent

2022-09-12 15:42:32 字數 1380 閱讀 2599

執行緒同步的其他方式:

1、autoresetevent

使用waitone和set 進行阻塞和釋放阻塞的執行緒,

waitone方法定義:

public virtual bool waitone(int millisecondstimeout);該方法用來阻塞執行緒,當在指定的時間間隔還沒有收到乙個訊號時,將返回false。

public autoresetevent(bool initialstate); 當initialstate值為false時執行緒阻塞等待set訊號或者等待超時時間結束,當為true時不進行執行緒阻塞。

millisecondstimeout 為超時時間  當設定的超時時間到時 無論是否收到了set的訊號 執行緒將解除阻塞的狀態立即執行 waitone的返回值為false  當收到set的訊號解除執行緒阻塞時返回值為true。

例子:

using system;

using system.threading;

namespace kenelmode

public static void testmethod()

else}}

}

2、訊號量(semaphore)

訊號量(semaphore)是由核心物件維護的int變數,當訊號量為0時,在訊號量上等待的執行緒會堵塞,訊號量大於0時,就解除堵塞。當在乙個訊號量上等待的執行緒解除堵塞時,核心自動會將訊號量的計數減1。在.net 下通過semaphore類來實現訊號量同步。

semaphore類限制可同時訪問某一資源或資源池的執行緒數。waitone

method, which is inherited from the waithandle

class, and release the semaphore by calling the release

method.'>執行緒通過呼叫 waitone方法將訊號量減1,並通過呼叫 release方法把訊號量加1

class program

// 等待1秒讓所有執行緒開始並阻塞在訊號量上

thread.sleep(500);

// 訊號量計數加4

// 最後可以看到輸出結果次數為4次

semaphore.release(4);

console.read();

}public static void testmethod(object number)

run ", number);

}}

3、 mutex 使用mutex.waitone()和mutex.releasemutex();

同步 執行緒同步

操作執行的先後順序。同步指兩個或兩個以上隨時間變化的量在變化過程中保持一定的相對關係。同步 英語 synchronization 指對在乙個系統中所發生的事件 event 之間進行協調,在時間上出現一致性與統一化的現象。在系統中進行同步,也被稱為及時 in time 同步化的 synchronous...

11 6 執行緒 執行緒同步

除了計算機體系結構的因素以外,程式使用變數的方式也會引起競爭,也會導致不一致的情況發生。例如,可能會對某個變數加1,然後基於這個數值做出某種決定。增量操作這一步和做出決定這一步兩者的組合並非原子操作,因而給不一致情況提供了可能。1.互斥量 可以通過使用pthread的互斥介面保護資料,確保同一時間只...

linux 執行緒 執行緒同步

因為執行緒獨自擁有的只有棧,其他的區域執行緒共同擁有。並且對共享區域的操作並不都是原子的。對共享區域的操作順序又是不確定的。就像建立兩個檔案描述符同時指向 同一檔案,並且連續向檔案中寫入那麼寫的東西可能是亂七八糟的。這時就需要執行緒對共享區的同步。而另一種情況是,多個執行緒的指令執行順序需要同步。這...