在 Python 中不释放条件实现中的锁定

Without releasing lock in Condition implementation in Python

我有一个关于 Condition.wait() 的问题。这是我在 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.append(waiter)
    saved_state = self._release_save()
    try:  
        if timeout is None:
            waiter.acquire()    # my question here
    ...

我发现它只是获取了锁,而没有在waiter上调用release(),所以它只是让Python GC销毁waiter吗?好吃吗?

是的,对于那种特定情况 - waiter.acquire() 在未指定 timeout 时被调用 - 一旦 wait 退出,waiter 对象将超出范围; waiternotify 调用中的 self.__waiters 中删除,调用 waiter.acquire() 停止阻塞是必需的,因此将引用该对象以保留它活。由于在 wait 完成时没有幸存的引用,整个对象将被垃圾收集器销毁,这意味着没有理由显式释放锁。