Condition 条件变量中 is_owned 方法为什么是返回True 表示锁属于当前线程啊
来源:11-5 线程同步 - condition 使用以及源码分析

qq_晚风依旧_0
2019-07-17
def _is_owned(self):
# Return True if lock is owned by current_thread.
# This method is called only if _lock doesn’t have _is_owned().
if self._lock.acquire(0):
self._lock.release()
return False
else:
return True
源码解释:返回函数True,表示锁的ownership 是当前线程,意味着self._lock.acquire(0) 条件判断是False,可是lock.acquire(0) 返回False,不是意味着获取锁失败吗,前后矛盾,该如何理解啊
2回答
-
Susiee
2020-02-04
我的理解:
首先,要区别传入的_lock是Lock,还是RLock。根据这个函数的说明,如果是RLock,它有自己的 _is_owner()方法,就不会调用Condition里的这个方法。那么,只有_lock是Lock的时候才会调用到Condition里的这个方法。
Lock不允许同一个线程没有release的情况下重复acquire,所以这个方法的逻辑没有问题:
如果acquire失败,说明当前线程正占用着锁,因此返回True
10 -
bobby
2019-07-21
这个是源码:
thread.get_ident(): 获得一个代表当前线程的魔法数字,常用于从一个字典中获得线程相关的数据。这个数字本身没有任何含义,并且当线程结束后会被新线程复用。通过获取当前线程的id来确定的
00
相似问题