#死鎖
'''如果兩個執行緒分別占有一部分資源並且同時等待對方的資源,就會造成死鎖。
儘管死鎖很少發生,但一旦發生就會造成應用的停止響應,程式不做任何事情。
避免死鎖:
解決:1.重構**
2.新增超時釋放鎖
'''from threading import thread,lock
import sys
import time
locka = lock(
)lockb = lock(
)#自定義執行緒
class
mythread1
(thread)
:#不論程序還是執行緒重寫的都是run方法
defrun
(self)
:if locka.acquire():
#如果可以獲取到鎖則返回true
print
(self.name +
'a鎖'
) time.sleep(
0.1)
if lockb.acquire(timeout=3)
:#在acquire函式中阻塞,一直等待鎖,不能往下執行了
#如果加上超時則表示退出acquire,繼續往下執行把a鎖釋放了
print
(self.name +
"a鎖+b鎖"
) lockb.release(
) locka.release(
)#自定義執行緒
class
mythread2
(thread)
:#不論程序還是執行緒重寫的都是run方法
defrun
(self)
:if lockb.acquire():
#如果可以獲取到鎖則返回true
print
(self.name +
'b鎖'
) time.sleep(
0.1)
if locka.acquire(timeout=3)
:print
(self.name +
"a鎖+b鎖"
) locka.release(
) lockb.release(
)def
main()
:pass
if __name__ ==
"__main__"
:#若不加上超時,則會一直不能進入a鎖+b鎖情況。
#造成執行緒1,2一直死等
mythread1(
).start(
) mythread2(
).start(
) sys.exit(
int(main()or
0))
python死鎖案例 Python執行緒 死鎖
死鎖產生的4個必要條件 1 互斥 乙個資源同一時刻只允許乙個執行緒進行訪問。2 占有未釋放 乙個執行緒占有資源,且沒有釋放資源。3 不可搶占 乙個已經占有資源的執行緒無法搶占到其他執行緒擁有的資源。4 迴圈等待 兩個或者兩個以上的執行緒,本身擁有資源,不釋放資源,並且同時嘗試獲得其他執行緒所持有的資...
python 死鎖 死鎖的示例 with
死鎖 死鎖就是一直等待對方釋放鎖的情景 死鎖的結果會造成程式的停止響應,不能再處理其他的任務了 需求 根據下標在列表中取值,保證同一時刻只能有乙個執行緒去取值 import threading import time 建立互斥鎖 lock threading.lock 根據下標去取值,保證同一時刻只...
死鎖學習筆記
資源分配圖 死鎖的預防與避免 銀行家演算法 難點 死鎖的檢測與恢復 死鎖發生的四個必要條件 互斥占有並等待 非搶占迴圈等待 滿足以上四個條件,不一定發生死鎖 但死鎖的發生一定要滿足上述四個條件。如果是單例項資源,滿足上述四個條件則一定會發生死鎖 死鎖是指在程序集合內的所有程序都處於阻塞狀態,而且其中...