死鎖是指兩個或兩個以上的進程在執行過程中,因爭奪資源而造成的一種互相等待的現象,若無外力作用,它們都將無法推進下去。此時稱系統處于死鎖狀態或系統產生了死鎖,這些永遠在互相等待的進程稱為死鎖進程。 由于資源占用是互斥的,當某個進程提出申請資源后,使得有關進程在無外力協助下,永遠分配不到必需的資源而無法繼續運行,這就產生了一種特殊現象死鎖。
coding=utf-8
import threading
import time
class MyThread1(threading.Thread):
? ? ? ? ?def run(self):
? ? ? ? ? ? ? ? if mutexA.acquire():
? ? ? ? ? ? ? ? ? ? ? ?print (self.name+'----do1---up----')
? ? ? ? ? ? ? ? ? ? ? ?time.sleep(1)
? ? ? ? ? ? ? ? ? ? ? ?if mutexB.acquire():
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? print (self.name+'----do1---down----')
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? mutexB.release()
? ? ? ? ? ? ? ? ? ? ? ? mutexA.release()
class MyThread2(threading.Thread):
? ? ? ? def run(self):
? ? ? ? ? ? ?if mutexB.acquire():
? ? ? ? ? ? ? ? ? ? print(self.name+'----do2---up----')
? ? ? ? ? ? ? ? ? ? time.sleep(1)
? ? ? ? ? ? ? ? ? ? ?if mutexA.acquire():
? ? ? ? ? ? ? ? ? ? ? ? ? ? print (self.name+'----do2---down----')
? ? ? ? ? ? ? ? ? ? ? ? ? ? mutexA.release()
? ? ? ? ? ? ? ? ? ? ?mutexB.release()
mutexA = threading.Lock()
mutexB = threading.Lock()
if __name__ =='__main__':
? ? ? t1 = MyThread1()
? ? ? t2 = MyThread2()
? ? ? t1.start()
? ? ? t2.start()
代碼中展示了一個線程的兩個功能函數分別在獲取了一個競爭資源之后再次獲取另外的競爭
程序已經掛起在那兒了,這種現象我們就稱之為”死鎖“。