是条件.获取(螺纹。条件())类似于锁定.获取(穿线。锁定). 是否两者都能进入锁。我能用吗条件。等等,通知锁定.获取或者我必须使用条件。等等,通知条件.获取. 在
cond.acquire() // can i replace with lock.acquire
while count[ipID]> 1:
cond.wait()
if ipID == 0:
time.sleep(10)
count[ipID] = count[ipID] + 1
cond.release() // can i replace with lock.release
如果你的病情是这样造成的:
…那么是的,正如the docs解释的那样,
cond.acquire()
只是调用lock.acquire()
,所以你可以这样做,得到同样的效果。{和}同样。然而,它很可能会误导人类读者(也可能是静态分析工具),所以除非你有一个很好的理由,否则你不应该这样做。在另一方面,如果它们是不相关的对象,创建方式如下:
^{pr2}$…那就不行了。如果您没有获得条件使用的锁,则调用
cond.wait()
是非法的。它保证会引发RuntimeError
。如果其他一些Lock
对象碰巧确保没有人访问cond
;cond.wait
的全部意义在于它原子性地释放了notify
上的锁和块,因此如果它没有持有它的锁,那么它作为一个条件是没有用的。在顺便说一句,最好同时获得} statement :
Lock
s和Condition
sin a ^{按照你写东西的方式,如果在这之后
acquire
引发了异常,你永远不会释放这个条件,所以其他等待它的线程都不能被唤醒。在当我们这样做时,使用}?如果您有太多的假
sleep
几乎总是线程设计有问题的标志。你为什么不能改成{notify
调用,您应该修复它。如果count[ipID]
没有得到正确的重置,那么while
循环可能会提前退出,那么修复这个问题就更重要了。不管你想用sleep
解决什么问题,你可能只是在掩饰它。在代码的通知部分如下。在
相关问题 更多 >
编程相关推荐