python 多執行緒 互斥鎖和死鎖

2021-10-07 19:06:54 字數 1457 閱讀 9874

在上一節提到的資源搶占的問題,那麼這個問題如何解決呢?互斥鎖就可以解決這個問題:

資源搶占的問題原因在於兩個執行緒操作同乙個資源,此時這個資源的內容就混亂了,對於兩個執行緒都不能正常服務

此時就可以考慮在乙個執行緒工作的時候,將執行緒鎖定,其他執行緒無法訪問,這就是互斥鎖

當多個執行緒幾乎同時修改某乙個共享資料的時候,需要進行同步控制

某個執行緒要更改共享資料時,先將其鎖定,此時資源的狀態為"鎖定",其他執行緒不能改變,只到該執行緒釋放資源,將資源的狀態變成"非鎖定",其他的執行緒才能再次鎖定該資源。互斥鎖保證了每次只有乙個執行緒進行寫入操作,從而保證了多執行緒情況下資料的正確性。

# 建立鎖

mutex = threading.lock(

)# 鎖定

mutex.acquire(

)# 解鎖

mutex.release(

)

import threading

import time

num =

100def

main()

: mutex = threading.lock(

) t1 = threading.thread(target=add1,args=

(1000000

,mutex)

) t2 = threading.thread(target=add2,args=

(1000000

,mutex)

) t1.start(

)#time.sleep(1)

t2.start(

) t1.join(

) t2.join(

)print

(f'-----main-----'

)def

add1

(nums,mutex)

:global num

mutex.acquire(

)for i in

range

(nums)

: num+=

1 mutex.release(

)#time.sleep(1)

print

(f'-----add1----'

)def

add2

(nums,mutex)

:global num

mutex.acquire(

)for i in

range

(nums)

: num +=

1 mutex.release(

)#time.sleep(1)

print

(f'-----add2----'

)if __name__ ==

'__main__'

: main(

)

多執行緒競爭 鎖 互斥鎖 死鎖 GIL

同乙個程序裡執行緒是資料共享的,當各個執行緒訪問資料資源時會出現競爭狀態,資料幾乎同步會被多個執行緒占用,造成資料混亂。python提供的對執行緒控制的物件。鎖的好處 確保了某段關鍵 只能由乙個執行緒從頭到尾完整地執行 鎖的壞處 某個執行緒要更改共享資料時,先將其鎖定,此時資源的狀態為 鎖定 其他執...

python互斥鎖和死鎖

同步就是協同步調,按預定的先後次序進行執行。如 你說完,我再說。同 字從字面上容易理解為一起動作 其實不是,同 字應是指協同 協助 互相配合。如程序 執行緒同步,可理解為程序或執行緒a和b一塊配合,a執行到一定程度時要依靠b的某個結果,於是停下來,示意b執行 b執行,再將結果給a a再繼續操作。解決...

python執行緒互斥鎖 Python多執行緒與互斥鎖

多執行緒 threading python的thread模組是 較底層的模組,python的threading 模組是對thread做了 些包裝的,可以更加 便的被使 1.使 threading模組 from threading import thread 匯入模組 t thread target ...