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...