一、死锁与递归锁
1、死锁:当多个进程(线程)交叉争夺多个互斥锁时会产生死锁的现象造成程序的阻塞。
import threading import time mutex_a = threading.Lock() mutex_b = threading.Lock() def task(name): mutex_a.acquire() # 第一名抢到a锁---第二名抢到a锁,此时第一名抢到b锁 print(‘{}获得了a锁‘.format(name)) mutex_b.acquire() # 第一名抢到b锁---第二名拿着a锁尝试抢b锁,此时第一名拿着b锁尝试抢a锁,此处开始阻塞 print(‘{}获得了b锁‘.format(name)) mutex_b.release() # 第一名释放b锁 print(‘{}释放了b锁‘.format(name)) mutex_a.release() # 第一名释放a锁 print(‘{}释放了a锁‘.format(name)) mutex_b.acquire() # 第一名抢到b锁 print(‘{}获得了b锁‘.format(name)) time.sleep(3) mutex_a.acquire() # 第一名拿着b锁尝试抢a锁 print(‘{}获得了a锁‘.format(name)) mutex_a.release() print(‘{}释放了a锁‘.format(name)) mutex_b.release() print(‘{}释放了b锁‘.format(name)) if __name__ == ‘__main__‘: for n_name in range(1, 10): t = threading.Thread(target=task, args=(n_name,)) t.start() ‘‘‘ 阻塞结果为: 1获得了a锁 1获得了b锁 1释放了b锁 1释放了a锁 1获得了b锁 2获得了a锁 ...... ‘‘‘
原文:https://www.cnblogs.com/caoyu080202201/p/12790726.html