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