一、前言
- 线程互斥锁分为递归锁和非递归锁。
- 互斥锁默认是非递归锁
- 如果一个线程多次获取非递归锁,就会出现死锁现象
- 如果一个线程可以多次获取同一个递归锁,不会产生死锁。
二、死锁现象
2.1什么是死锁
指两个或两个以上的进程或线程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。
此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。
2.2 死锁实例
from threading import Thread,RLock,Lock
import time
# 死锁现象
# ==================================================================
mutexA = Lock() # 锁A
mutexB = Lock() # 锁B
class Task(Thread):
def run(self):
self.F1()
self.F2()
def F1(self):
mutexA.acquire() # 加A锁
print('%s 拿到了A锁' % self.name)
mutexB.acquire() # 加B锁
print('%s 拿到了B锁' % self.name)
mutexB.release() # 释放B锁
mutexA.release