鎖是什麼?什麼場合使用鎖?
鎖是一種機制,用於保護那些會引起衝突的資源。
比如上廁所,進去之後第一件事幹嘛?把廁所門反鎖!表示什麼呢?表示這個廁所正在使用中!
至於在廁所裡面幹大事、幹小事、還是***,都可以!
完事之後幹嘛?把廁所門開啟!表示什麼呢?那誰,你可以進來***了。
import執行效果圖:threading
import
time
defmy_func(num):
global
counter, mutex
#獲得執行緒名
threadname =threading.currentthread().getname()
for i in
range(num):
mutex.acquire()
#鎖住①
counter = counter + 1 #
保護② 如同廁所坑位是搶占性資源,同一時間只能乙個人去蹲
mutex.release() #
解鎖③print(threadname, i, counter) #
再回去,坑位counter可能已被其它人蹲過
time.sleep(1) if
__name__ == '
__main__':
counter = 0 #
計數器mutex = threading.lock() #
建立鎖threads =
for i in range(4):
建立執行緒
for t in
threads:
t.setdaemon(true) #守護
t.start() #
啟動執行緒
for t in
threads:
t.join()
#阻塞主程,直到執行緒退出
可以發現到 counter 並不是順序顯示的,看官可以思考其原因。
importthreading
import
time
class
worker(threading.thread):
'''執行緒類
'''def
__init__(self, num=5):
super().
__init__
() self.num =num
defrun(self):
global
counter, mutex
threadname =threading.currentthread().getname()
for i in
range(self.num):
mutex.acquire()
#鎖住①
counter = counter + 1 #
保護② 如同廁所坑位是搶占性資源,同一時間只能乙個人去蹲
mutex.release() #
解鎖③print(threadname, i, counter) #
此時,counter可能又已被其它執行緒改變
time.sleep(1)
if__name__ == '
__main__':
#全域性計數器
counter = 1
#建立鎖 mutex =threading.lock()
#建立執行緒物件
threads =
for i in range(4):
新增 4 個 worker
#啟動執行緒
for t in
threads:
t.start()
#阻塞主程
for t in
threads:
t.join()
多執行緒筆記2(執行緒與鎖)
一 同步方法 由於我們可以通過private關鍵字來保證資料物件只能被方法訪問,所以我們只需要針對方法提出一套機制,這套機制就是synchronized關鍵字,他包括兩種用法 synchronized方法和synchronized塊 同步方法 public synchronized void met...
Python學習筆記 多執行緒鎖
多執行緒的鎖 如果有多個執行緒同時操作乙個物件,如果沒有很好地保護該物件,會造成程式結果的不可預期 多執行緒中,所有變數都由所有執行緒共享,所以,任何乙個變數都可以被任何乙個執行緒修改,因此,執行緒之間共享資料最大的危險在於多個執行緒同時改乙個變數,把內容給改亂了。因此需要用鎖threading.l...
python 多執行緒 鎖
參考 python cookbook 12章 啟動和停止執行緒 start 啟動執行緒 is alive 判斷是否已經結束 join 請求連線某個執行緒,等待該執行緒結束,才退出join函式 daemon引數,守護執行緒,該執行緒無法被連線,主線程結束後自動銷毀。2.7不適用 終止執行緒 需要自己構...