鎖
lock()
lock(指令鎖)是可用的最低階的同步指令。lock處於鎖定狀態時,不被特定的執行緒擁有。lock包含兩種狀態——鎖定和非鎖定,以及兩個基本的方法。
可以認為lock有乙個鎖定池,當執行緒請求鎖定時,將執行緒至於池中,直到獲得鎖定後出池。池中的執行緒處於狀態圖中的同步阻塞狀態。
構造方法:
lock()
例項方法:
acquire([timeout]): 使執行緒進入同步阻塞狀態,嘗試獲得鎖定。
release(): 釋放鎖。使用前線程必須已獲得鎖定,否則將丟擲異常
重入鎖rlock()
rlock(可重入鎖)是乙個可以被同乙個執行緒請求多次的同步指令。rlock使用了「擁有的執行緒」和「遞迴等級」的概念,處於鎖定狀態時,rlock被某個執行緒擁有。擁有rlock的執行緒可以再次呼叫acquire(),釋放鎖時需要呼叫release()相同次數。
可以認為rlock包含乙個鎖定池和乙個初始值為0的計數器,每次成功呼叫 acquire()/release(),計數器將+1/-1,為0時鎖處於未鎖定狀態。
構造方法:
rlock()
例項方法:
acquire([timeout])/release(): 跟lock差不多。
互斥鎖 condition
互斥鎖是最簡單的執行緒同步機制,python提供的condition物件提供了對複雜執行緒同步問題的支援。condition被稱為條件變數,除了提供與lock類似的acquire和release方法外,還提供了wait和notify方法。執行緒首先acquire乙個條件變數,然後判斷一些條件。如果條件不滿足則wait;如果條件滿足,進行一些處理改變條件後,通過notify方法通知其他執行緒,其他處於wait狀態的執行緒接到通知後會重新判斷條件。不斷的重複這一過程,從而解決複雜的同步問題。可以認為condition物件維護了乙個鎖(lock/rlock)和乙個waiting池。執行緒通過acquire獲得condition物件,當呼叫wait方法時,執行緒會釋放condition內部的鎖並進入blocked狀態,同時在waiting池中記錄這個執行緒。當呼叫notify方法時,condition物件會從waiting池中挑選乙個執行緒,通知其呼叫acquire方法嘗試取到鎖。condition物件的建構函式可以接受乙個lock/rlock物件作為引數,如果沒有指定,則condition物件會在內部自行建立乙個rlock。
除了notify方法外,condition物件還提供了notifyall方法,可以通知waiting池中的所有執行緒嘗試acquire內部鎖。由於上述機制,處於waiting狀態的執行緒只能通過notify方法喚醒,所以notifyall的作用在於防止有執行緒永遠處於沉默狀態。
例項方法:
acquire([timeout])
notify()
notifyall()
release()
python鎖機制 python 鎖機制
當有兩個或跟多個執行緒或程序需要操作乙個變數或程序時,會出現意想不到的結果,這是因為執行緒或程序時迸發進行的,對同意變數或檔案操作時,會出現同時對其操作,從到導致邏輯錯誤。bin usr env python coding utf 8 import multiprocessing import ti...
python鎖機制 Python高階之多執行緒鎖機制
1.多程序的優勢 為了同步完成多項任務,通過提高資源使用效率來提高系統的效率。2.檢視執行緒數 threading.enumerate 函式便可以看到當前執行緒的數量。3.檢視當前執行緒的名字 threading.current thread 可以看到當前執行緒的資訊。4.類可以繼承 threadi...
python多執行緒鎖機制
在多執行緒程式設計中常用到的乙個概念就是鎖,它用於將執行緒需要獨佔的資源進行加鎖,使用後再進行釋放,防止死鎖發生。此處給出乙個不加鎖的多執行緒例子 實現整數n在每個執行緒內加1並列印 usr bin python coding utf 8 import threading import time c...