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

2021-09-22 18:30:53 字數 404 閱讀 2290

同乙個程序裡執行緒是資料共享的,當各個執行緒訪問資料資源時會出現競爭狀態,資料幾乎同步會被多個執行緒占用,造成資料混亂。

python提供的對執行緒控制的物件。

鎖的好處:

確保了某段關鍵**只能由乙個執行緒從頭到尾完整地執行

鎖的壞處:

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

避免死鎖:

gil (全域性直譯器鎖)實際就是一把互斥鎖,只有在cpython中才有,限制多執行緒同時執行,保證同一時間只有乙個執行緒執行,所以cpython中的多執行緒其實是偽多執行緒,經常使用協程代替執行緒。

解決方案:

互斥鎖 死鎖 遞迴鎖 訊號量 GIL鎖

互斥鎖lock也是一種阻塞,可以保證共享資料操作的完整性。保證在任一時刻,只能有乙個執行緒訪問該物件 from multiprocessing import process from threading import thread from multiprocessing import lock 程...

python 多執行緒 互斥鎖和死鎖

在上一節提到的資源搶占的問題,那麼這個問題如何解決呢?互斥鎖就可以解決這個問題 資源搶占的問題原因在於兩個執行緒操作同乙個資源,此時這個資源的內容就混亂了,對於兩個執行緒都不能正常服務 此時就可以考慮在乙個執行緒工作的時候,將執行緒鎖定,其他執行緒無法訪問,這就是互斥鎖 當多個執行緒幾乎同時修改某乙...

鎖 互斥鎖,死鎖

當多個執行緒幾乎同時修改某乙個共享資料的時候,需要進行同步控制 執行緒同步能夠保證多個執行緒安全訪問競爭資源,最簡單的同步機制是引入互斥鎖。互斥鎖為資源引入乙個狀態 鎖定 非鎖定 某個執行緒要更改共享資料時,先將其鎖定,此時資源的狀態為 鎖定 其他執行緒不能更改 直到該執行緒釋放資源,將資源的狀態變...