码迷,mamicode.com
首页 > 编程语言 > 详细

python 死锁

时间:2020-05-31 11:18:51      阅读:61      评论:0      收藏:0      [点我收藏+]

标签: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")

 

python 死锁

标签:art   python   thread   self   sel   elf   code   timeout   退出   

原文地址:https://www.cnblogs.com/cfpl/p/12996549.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!