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

1
0

bobby

2019-07-21

//img1.sycdn.imooc.com/szimg/5d341f6a092a893e11480826.jpg 这个是源码:

thread.get_ident(): 获得一个代表当前线程的魔法数字,常用于从一个字典中获得线程相关的数据。这个数字本身没有任何含义,并且当线程结束后会被新线程复用。通过获取当前线程的id来确定的

0
0

Python3高级核心技术97讲,高级进阶的必学课程

socket编程/多线程/多进程/线程池/asyncio并发编程/协程和异步IO

2121 学习 · 551 问题

查看课程