python 多執行緒筆記(2) 鎖

2021-09-22 17:09:22 字數 2080 閱讀 9834

鎖是什麼?什麼場合使用鎖?

鎖是一種機制,用於保護那些會引起衝突的資源。

比如上廁所,進去之後第一件事幹嘛?把廁所門反鎖!表示什麼呢?表示這個廁所正在使用中!

至於在廁所裡面幹大事、幹小事、還是***,都可以!

完事之後幹嘛?把廁所門開啟!表示什麼呢?那誰,你可以進來***了。

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 並不是順序顯示的,看官可以思考其原因。

import

threading

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不適用 終止執行緒 需要自己構...