首页 > 编程语言 > 详细

python 中的死锁

时间:2019-11-05 19:12:09      阅读:79      评论:0      收藏:0      [点我收藏+]
 1 from threading import Thread,Lock
 2 import threading
 3 import time
 4 # mutexA=Thread.RLock()
 5 # mutexB=Lock()
 6 r_lock= threading.RLock()
 7 class MyThread(Thread):
 8     def run(self):
 9         self.func1()
10         self.func2()
11     def func1(self):
12         r_lock.acquire()
13         print(\033[41m%s 拿到A锁\033[0m %self.name)
14 
15         r_lock.acquire()
16         print(\033[42m%s 拿到B锁\033[0m %self.name)
17         r_lock.release()
18 
19         r_lock.release()
20 
21     def func2(self):
22         r_lock.acquire()
23         print(\033[43m%s 拿到B锁\033[0m %self.name)
24         time.sleep(2)
25 
26         r_lock.acquire()
27         print(\033[44m%s 拿到A锁\033[0m %self.name)
28         r_lock.release()
29 
30         r_lock.release()
31 
32 if __name__ == __main__:
33     for i in range(10):
34         t=MyThread()
35         t.start()
‘‘‘
这个程序的流程是:创建了10个线程,线程1 先拿到A锁打印信息,然后又拿到B锁打印信息,然后释放B锁,再然后释放A锁,线程1继续执行func2
拿到B锁。2、线程2 拿到A锁打印信息继续执行,因为线程1没有释放B锁,所以线程2就会只打印拿到A锁,同样线程2想继续执行,因为线程1没有释放A锁,所以也不会继续
执行下去,导致的结果就是死锁

结果
Thread-1 拿到A锁
Thread-1 拿到B锁
Thread-1 拿到B锁
Thred-2 拿到A锁
然后程序就会卡死在这里


‘‘‘

 

python 中的死锁

原文:https://www.cnblogs.com/luncky/p/11799995.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!