python死鎖
阿新 • • 發佈:2020-12-10
技術標籤:python基礎
死鎖就是一個執行緒需要的鎖在另外一個執行緒哪裡,而自己手裡拿著他需要的鎖,一次死鎖,程式碼如下:
from threading import Lock,Thread
mutex_a = Lock()
mutex_b = Lock()
class Mythread(Thread):
def run(self):
self.fun1()
self.fun2()
def fun1(self):
mutex_a.acquire()
print("get a" )
mutex_b.acquire()
print("get b")
mutex_b.release()
mutex_a.release()
def fun2(self):
mutex_b.acquire()
print("get B")
import time
time.sleep(2)
mutex_a.acquire()
print("get A")
mutex_a. release()
mutex_b.release()
if __name__ == '__main__':
for i in range(8):
thread_test = Mythread()
thread_test.start()
結果如下:
解釋如下
#死鎖產生原因 首先執行緒1 搶到A鎖 其他搶不到等著,接著搶到B鎖 其他任然搶A
#接著釋放B鎖,別的程序任然搶A接著釋放A鎖,別的程序搶到A鎖,執行緒1搶到B鎖,然後睡了2秒
#其他要搶B鎖,B鎖線上程1上,然後執行緒1要搶A鎖,A鎖線上程2上,索要之鎖都在別的執行緒中,所以死鎖