|
|
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块中,您可以查询变量以查看是否已获取锁。如果有,释放。 |
|
|
user107586 · 如何处理等待句柄不会导致无限循环? 1 年前 |
|
|
ron burgundy · 获取-释放语义是否跨线程传递?[副本] 1 年前 |
|
|
BenjiFB · C#内存缓存:在一次操作中追加到列表? 1 年前 |
|
|
András Takács · Python多线程问题 1 年前 |
|
|
András Takács · Python多线程错误 1 年前 |