C 同步執行緒類

2021-08-04 10:43:54 字數 1550 閱讀 9620

system.threading命名空間提供了用於同步執行緒的類,包括mutex, monitor, interlocked, autoresetevent, manualrestevent,lock關鍵字

lock關鍵字

lock語句通過隱式使用monitor來提供同步功能,在塊開始處呼叫monitor.enter(), 在塊結尾處呼叫monitor.exit()

lock關鍵字可確保當乙個執行緒位於**的臨界區時,另乙個執行緒不會進入該臨界區,如果其他執行緒嘗試進入鎖定的**,則它將一直等待,直到該物件被釋放。

lock(lockobject)

monitor

public static void enter(object) //在指定物件上獲取排他鎖

public static void exit(object) //釋放指定物件的排他鎖

還有一些過載方法

interlocked

else

}public static t exchange(t, t) //通過以原子操作的形式將變數設定為指定值

public static t compareexchange(t, t, t) //比較和交換操作按原子操作執行

mutex:waithandle(mutex繼承自waithandle)

waitone()請求互斥體的所屬權

releasemutex釋放互斥體所屬權

mutex是同步基元,它只向乙個執行緒授予對共享資源的獨佔訪問權,如果乙個執行緒獲取了互斥體,則要獲取該互斥體的第二個執行緒被掛起,直到第乙個執行緒釋放該互斥體。

mutex類強執行緒標示,互斥體只能由獲得它的執行緒釋放,semaphore類不強制執行緒標示

如果執行緒在擁有互斥體時終止,則稱此互斥體被放棄,mutex狀態設為收到訊號,下乙個執行緒獲得所有權,在獲取被放棄mutex的下乙個執行緒中將引發abandonedmutexexception

autoresetevent

waitone()阻止當前執行緒,直到當前waithandle收到訊號

reset    將事件狀態設定為非終止狀態,導致執行緒阻止

set      將事件狀態設定為終止狀態,允許乙個或多個等待執行緒繼續

一旦它被終止,autoresetevent將立即釋放執行緒並返回到非終止狀態

manualresetevent

waitone()阻止當前執行緒,直到當前waithandle收到訊號

reset    將事件狀態設定為非終止狀態,導致執行緒阻止

set      將事件狀態設定為終止狀態,允許乙個或多個等待執行緒繼續

一旦它被終止,manualresetevent將保持終止狀態,直到它被手動重置

執行緒同步 Barrier類

barrier類 用於組織多個執行緒及時在某乙個時刻碰面。並提供了乙個 函式,每次執行緒呼叫了signalandwait方法後該 函式會被執行。demo using system using system.threading 在main方法下面加入以下 片段 static barrier barri...

C 執行緒同步

volatile是最簡單的一種同步方法,當然簡單是要付出代價的。它只能在變數一級做同步,volatile的含義就是告訴處理器,不要將我放入工作記憶體,請直接在主存操作我。www.bitscn.com 因此,當多執行緒同時訪問該變數時,都將直接操作主存,從本質上做到了變數共享。能夠被標識為volati...

c 執行緒同步

以乙個程式來說明執行緒不同步所帶來的問題 class program private int counter 0 private void actionmethod t thread.currentthread.name,counter 結果如下 從上面的結果中可以看到主線程和子執行緒都在爭奪act...