如何检查python中存储在信号量(多处理模块)中的值?



我需要解决哲学家用餐的问题,其中的方法是拿起两只筷子,如果两个都是可用的。每个筷子的可用性存储在一个初始值为1的信号量(多处理模块)中。

为了实现这一点,我试图读取存储在信号量中的值,但我找不到任何东西。有一个函数来得到这个值吗?

我尝试了不同的尝试,例如:

从multiprocessing导入信号量

筷子=信号(1)

如果筷子。_value == 1:

multiprocessing.Semaphore对象有一个可以使用的get_value方法(参考信号量源)。根据你的例子:

from multiprocessing import Semaphore
chopstick = Semaphore(1)
if chopstick.get_value() == 1:
...

然而,在许多线程和多处理情况下,你不能依赖返回的值,因为它可能在你查看它之后和在你使用它之前发生变化。

更确切地说,考虑只是试着用chopstick.aquire()拿筷子。然后它就会简单地"拿走它"。如果它可用,或者等待它可用(即:另一个进程调用它的release()方法),而不需要知道它的值。

最新更新