python 死锁

 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")

 

posted @ 2020-05-31 10:04  乘风去破浪  阅读(368)  评论(0编辑  收藏  举报