在上一節提到的資源搶占的問題,那麼這個問題如何解決呢?互斥鎖就可以解決這個問題:
資源搶占的問題原因在於兩個執行緒操作同乙個資源,此時這個資源的內容就混亂了,對於兩個執行緒都不能正常服務
此時就可以考慮在乙個執行緒工作的時候,將執行緒鎖定,其他執行緒無法訪問,這就是互斥鎖
當多個執行緒幾乎同時修改某乙個共享資料的時候,需要進行同步控制
某個執行緒要更改共享資料時,先將其鎖定,此時資源的狀態為"鎖定",其他執行緒不能改變,只到該執行緒釋放資源,將資源的狀態變成"非鎖定",其他的執行緒才能再次鎖定該資源。互斥鎖保證了每次只有乙個執行緒進行寫入操作,從而保證了多執行緒情況下資料的正確性。
# 建立鎖
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 ...