标签:art python thread self sel elf code timeout 退出
1 """ 2 死锁 3 要AB两个锁 4 当A锁内部需要使用B锁,同时B锁内部需要使用A锁的时候,就要可能会出现死锁 5 6 出现死所的解决方法: 7 1.重构代码 8 2.添加timeout时间 9 10 下面代码中要可能返回下面内容,在同时认为锁被对方占用,同时释放 11 Thread-1获取到a锁 12 Thread-2获取到b锁 13 over 14 15 """ 16 import time 17 from threading import Thread, Lock 18 19 lock_a = Lock() 20 lock_b = Lock() 21 22 23 class MyThread(Thread): 24 def run(self) -> None: 25 if lock_a.acquire(): # 如果a锁可以获取到,返回True,获取不到就阻塞 26 print(self.name + "获取到a锁") 27 time.sleep(0.1) 28 if lock_b.acquire(timeout=0.01): # 这里不加退出时间就会要可能出现死锁 29 print(self.name + "获取到b锁,现有ab锁") 30 lock_b.release() 31 lock_a.release() 32 33 34 class MyThread1(Thread): 35 def run(self) -> None: 36 if lock_b.acquire(): # 如果b锁可以获取到,返回True,获取不到就阻塞 37 print(self.name + "获取到b锁") 38 time.sleep(0.1) 39 if lock_a.acquire(timeout=0.01): # 这里不加退出时间就会要可能出现死锁 40 print(self.name + "获取到a锁,现有ab锁") 41 lock_a.release() 42 lock_b.release() 43 44 45 if __name__ == ‘__main__‘: 46 t1 = MyThread() 47 t2 = MyThread1() 48 49 t1.start() 50 t2.start() 51 t1.join() 52 t2.join() 53 54 print("over")
标签:art python thread self sel elf code timeout 退出
原文地址:https://www.cnblogs.com/cfpl/p/12996549.html