1,递归锁Rlock:递归锁是为了解决死锁问题,且递归锁的特点是在同一个线程中可以被acquire()多次
多个acquire()在递归锁中不会阻塞,而互斥锁Lock就会阻塞
代码示例:
from threading import RLock rlock = RLock()
#多个acquire()在递归锁中不会阻塞,而线程锁Lock就会阻塞
rlock.acquire()
rlock.acquire()
rlock.acquire()
rlock.acquire()
print(123)
运行结果:
2,递归锁图示:(本质上为一串钥匙)
3,递归锁解决科学家吃面问题:
import time
from threading import RLock, Thread noodle_lock = fork_lock = RLock() #一个钥匙串上的两把钥匙 def eat1(name):
noodle_lock.acquire() #一把钥匙,说明一串钥匙都在我手上了
print('%s拿到面了'%name)
fork_lock.acquire()
print('%s拿到叉子了'%name)
print('%s吃面'%name)
fork_lock.release()
noodle_lock.release() def eat2(name):
fork_lock.acquire()
print('%s拿到叉子了' % name)
time.sleep(1)
noodle_lock.acquire()
print('%s拿到面了'%name)
print('%s吃面'%name)
noodle_lock.release()
fork_lock.release() Thread(target=eat1,args=('alex',)).start()
Thread(target=eat2,args=('Egon',)).start()
Thread(target=eat1,args=('bossjin',)).start()
Thread(target=eat1,args=('nezha',)).start()
运行结果: