import threading
import time
mutexA=threading.Lock() #创建一个锁
mutexB=threading.Lock() #创建一个锁
class threadA(threading.Thread):
def run(self):
if mutexA.acquire(1): #锁定成功就继续执行,锁定不成功,就一直等待
print(self.name+"我拿到了资源A,还没有拿到资源B,等待...")
time.sleep(3)
#mutexA.release() #没拿到资源B,先把手中的资源A释放,就可以避免死锁
if mutexB.acquire(1): #锁定不成功。一直等待
print(self.name+"我拿到了资源A和资源B,我的活干完了!")
mutexB.release()
mutexA.release()
class threadB(threading.Thread):
def run(self):
if mutexB.acquire(1): #锁定成功就继续执行,锁定不成功,就一直等待
print(self.name+"我拿到了资源B,还没有拿到资源A,等待...")
time.sleep(3)
#mutexB.release() #没拿到资源A,先把手中的资源B释放,就可以避免死锁
if mutexA.acquire(1): #锁定不成功。一直等待
print(self.name+"我拿到了资源A和资源B,我的活干完了!")
mutexA.release()
mutexB.release()
#开启两个线程
thread1=threadA()
thread1.start()
thread2=threadB()
thread2.start()
Python 多线程死锁
最新推荐文章于 2024-04-10 14:29:11 发布