language
python中Lock与RLock的区别
$ cat posts/2021-04-11-python中lock与rlock的区别.md --render
xander 1 min read
Lock vs RLock 简单对比
主要区别是Lock只能被获取一次,不能被释放前再次被获取。(在它被释放后,可以被任意线程重新获取)
RLock则是另一种表现,可以被同一线程多次获取。它需要被释放同样次数才能被释放。
另一个区别是获取Lock可以被任意线程释放,当一个被获取的RLock只能被获取它的线程释放。
以下的例子是展示为什么RLock有时候是有用的。假定你有:
def f():
g()
h()
def g():
h()
do_something1()
def h():
do_something2()让我们假设所有f,g和h都是public,他们都是需要同步操作
使用一个Lock,你可以做一些事儿,如下:
lock = Lock()
def f():
with lock:
_g()
_h()
def g():
with lock:
_g()
def _g():
_h()
do_something1()
def h():
with lock:
_h()
def _h():
do_something2()基本上,f不能调用g在获取锁的时候,它需要调用_g。所以你需要每个函数都有一个异步版本和一个同步版本
使用RLock可以很优雅的解决这个问题:
lock = RLock()
def f():
with lock:
g()
h()
def g():
with lock:
h()
do_something1()
def h():
with lock:
do_something2()Lock
RLock
相关资料
下一篇 →
shell命令中的2>&1