python 中的死锁

 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锁
然后程序就会卡死在这里


'''

猜你喜欢

转载自www.cnblogs.com/luncky/p/11799995.html