RLock是对Lock的明智默认设置吗? [英] Is RLock a sensible default over Lock?

查看:74
本文介绍了RLock是对Lock的明智默认设置吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

Python中的线程模块提供两种锁:普通锁和可重入锁.在我看来,如果我需要一个锁,我应该总是更喜欢RLock而不是Lock;主要是为了防止出现死锁情况.

the threading module in Python provides two kinds of locks: A common lock and a reentrant lock. It seems to me, that if I need a lock, I should always prefer the RLock over the Lock; mainly to prevent deadlock situations.

除此之外,我还看到两点,是什么时候更喜欢使用Lock而不是RLock:

Besides that, I see two points, when to prefer a Lock over a RLock:

  • RLock的内部结构更加复杂,因此性能可能会更差.
  • 由于某种原因,我想防止线程通过锁递归.

我的推理正确吗?你能指出其他方面吗?

Is my reasoning correct? Can you point out other aspects?

推荐答案

两点:

  • 在正式发布的Python版本(2.4、2.5 ...直至3.1)中,RLock比Lock慢得多,因为Lock是在C中实现的,而RLocks是在Python中实现的(这将在3.2中更改)
  • 可以从任何线程(不一定是获取()d的线程)释放锁,而锁定(RLock)必须由获取它的同一线程释放.

最重要的是,我建议仅在RLock符合您要查找的语义的情况下使用,否则默认使用Locks.

Bottom line, I'd suggest to only use an RLock if it matches the semantics you are looking for, otherwise stick to Locks by default.

这篇关于RLock是对Lock的明智默认设置吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆