第十章:使用进程、线程和协程提供并发性-threading:进程中管理并发操作-控制资源访问-再入锁

10.3.8.1 再入锁
正常的Lock对象不能请求多次,即使是由同一个线程请求也不例外。如果同一个调用链中的多个函数访问一个锁,则可能会产生我们不希望的副作用。

import threading

lock = threading.Lock()

print('First try :',lock.acquire())
print('Second try:',lock.acquire(0))

在这里,对第二个acquire()调用给定超时值为0,以避免阻塞,因为锁已经被第一个调用获得。
运行结果:
在这里插入图片描述
如果同一个线程的不同代码需要“重新获得”锁,那么在这种情况下要使用RLock。

import threading

lock = threading.RLock()
print('First try :',lock.acquire())
print('Second try:',lock.acquire(0))

与前面的例子相比,对代码唯一的修改就是用RLock替换Lock。
运行结果:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_43193719/article/details/89643722