1)原子操作(interlocked):所有方法都是執行一次原子讀取或一次寫入操作。
2)lock()語句:避免鎖定public型別,否則例項將超出**控制的範圍,定義private物件來鎖定。
3)monitor實現執行緒同步
通過monitor.enter() 和 monitor.exit()實現排它鎖的獲取和釋放,獲取之後獨佔資源,不允許其他執行緒訪問。
還有乙個tryenter方法,請求不到資源時不會阻塞等待,可以設定超時時間,獲取不到直接返回false。
4)readerwriterlock
當對資源操作讀多寫少的時候,為了提高資源的利用率,讓讀操作鎖為共享鎖,多個執行緒可以併發讀取資源,而寫操作為獨佔鎖,只允許乙個執行緒操作。
5)事件(event)類實現同步
事件類有兩種狀態,終止狀態和非終止狀態,終止狀態時呼叫waitone可以請求成功,通過set將時間狀態設定為終止狀態。
1)autoresetevent(自動重置事件)
2)manualresetevent(手動重置事件)
6)訊號量(semaphore)
訊號量是由核心物件維護的int變數,為0時,執行緒阻塞,大於0時解除阻塞,當乙個訊號量上的等待執行緒解除阻塞後,訊號量計數+1。
執行緒通過waitone將訊號量減1,通過release將訊號量加1,使用很簡單。
7)互斥體(mutex)
獨佔資源,用法與semaphore相似。
8)跨程序間的同步
通過設定同步物件的名稱就可以實現系統級的同步,不同應用程式通過同步物件的名稱識別不同同步物件。
執行緒同步鎖
同步鎖 對於兩個函式a,b,建立兩條執行緒,並且讓其睡眠,流程上看似輪流執行,其實不是,因為涉及到cpu切換去執行問題。import threading import time def a for i in range 3 print a str i time.sleep 0.01 def b fo...
執行緒同步 互斥鎖
一 為什麼要用多執行緒?避免阻塞 乙個程序如果只有乙個執行緒的話,當這個乙個執行緒阻塞則就整個程序阻塞,無法再去完成其他事情。提高效率,避免cpu空 程式經常涉及讀寫操作就會訪問磁碟,這些操作的速度比cpu慢的多,而為了等待這些操作的響應,cpu又不能去幹其他的事情或者處理新的請求,導致這種單執行緒...
執行緒同步與鎖
二元訊號量和多元訊號量,是乙個變數,獲取 1,釋放 1,當變數處於 0的情形下才可以被獲取。乙個執行緒的獲取可以用另乙個執行緒來釋放。很像二元訊號量,但是釋放只能是本執行緒。臨界區是比互斥量更加嚴格的同步手段,訊號量和互斥量可以不同程序之間操作,也就是說 乙個程序建立了乙個互斥量或訊號量,另乙個程序...