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锁
然后程序就会卡死在这里
‘‘‘
原文:https://www.cnblogs.com/luncky/p/11799995.html