|
|
1
6
这个问题有点不清楚。您要么需要使用信号灯而不是锁,要么检查锁是否被锁定。 例如,python的锁与.net上的锁不同。python的锁一旦解锁,将释放在同一锁上获得()并暂时阻塞的所有其他线程。任何线程都可以同时释放和运行。所以,不要再做第二次中继
如果您想要“排队”行为,其中只有一个tread在某些其他版本发布后将获得锁的所有权,那么可以使用信号量、事件或其他类似的类来允许嵌套的锁定和排队行为。 值得注意的是,其他语言/loolkits(如.NET)都以本地方式进行锁排队,线程可以按顺序堆积lock.acquire,按照acquire队列的顺序阻塞并取得锁对象的所有权,而不是一次全部释放。 (编辑:忘记将父级设置为“if l.locked:l.realse()”。更正了代码。lock.locked在cpython 2.6.x、3.x、Ironpython 2.6.1中被确认为一种现有的方法) |
|
|
2
6
期望是获得锁的上下文应该知道何时应该释放它。在什么情况下,您会多次尝试释放它? |
|
|
3
0
由于lock.acquire()如果成功获取锁,则返回true,因此可以将锁定状态存储在局部变量中,然后将lock.acquire()和后续代码封装到try finally块中。然后在finally块中,您可以查询变量以查看是否已获取锁。如果有,释放。 |
|
|
Jamie M · 组合来自多个进程的数据 4 年前 |
|
Dinesh · 如果进程数超过内核数的一半,为什么性能会下降? 8 年前 |
|
|
cooke · python多处理使用特定参数串行运行 8 年前 |
|
|
SSV · 如何在Java中并行处理对象列表 8 年前 |
|
|
Vingtoft · 使用管道的Python多进程无阻塞内部通信 8 年前 |
|
|
cosz3 · Python多进程是否共享同一对象? 8 年前 |
|
|
Anish Shanbhag · 多处理事件不工作 8 年前 |