不释放Python中的锁定条件实现
我有一个关于条件的问题。等等()。以下是我在threading.py中第339行阅读的源代码:不释放Python中的锁定条件实现,python,garbage-collection,conditional-statements,Python,Garbage Collection,Conditional Statements,我有一个关于条件的问题。等等()。以下是我在threading.py中第339行阅读的源代码: def wait(self, timeout=None): ... if not self._is_owned(): raise RuntimeError("cannot wait on un-acquired lock") waiter = _allocate_lock() waiter.acquire() self.__waiters
def wait(self, timeout=None):
...
if not self._is_owned():
raise RuntimeError("cannot wait on un-acquired lock")
waiter = _allocate_lock()
waiter.acquire()
self.__waiters.append(waiter)
saved_state = self._release_save()
try:
if timeout is None:
waiter.acquire() # my question here
...
我发现它只是获取了锁,而没有在以后调用water上的release(),所以它只是让pythongc销毁water吗?好吗? 是,对于该特定情况-
water.acquire()
在指定了notimeout
时被调用-water
对象将在wait
退出时退出作用域waiter
从self中删除。u waiters
在notify
调用中,调用waiter.acquire()
停止阻塞需要该调用,因此会有对对象的引用以使其保持活动状态。因为当wait
完成时没有幸存的引用,所以整个对象将被垃圾收集器破坏,这意味着没有理由显式释放锁