求各位指点一下这里 Python lock 的用法,我想了很久还是不理解。
用两个 lock 去控制 def foo()和 def bar()运行的顺序。
我不理解的地方是:
在__init__里面,self.bar_lock.acquire()已经把 self.bar_lock 给锁上了。
运行的时候,foo()和 bar()会同时进行,但是因为在 bar()里面,有一个 self.bar_lock.acquire(),这行代码之前已经运行过了,因此在这里又再一次把 self.bar_lock 给 acquire 住了,等于是 self.bar_lock 被 acquire 了两次。
我上网查了一下,遇到这个情况,第二次 acquire 的时候,如果发现这个 self.bar_lock 之前已经被 acquire,那么这个第二次的 acquire 就会停在这里,等到 self.bar_lock 被 release 。
那么我的问题来了,如果被 acquire 了两次的话,我们需要不要 release 两次? 看代码,我们不需要 release 两次。