2

我正在用 c 语言实现信号量。我有一个 POSIX 计数信号量。我想给它赋值。而且我不想使用等待或发布。我可以这样做吗?POSIX Semaphore 是否有类似“setValue”的功能?

4

2 回答 2

3

如果你可以在正常操作期间直接改变它的值(即除了初始化之外),它就不再是一个信号量了。所以你可能正在寻找不同的东西,也许是线程安全的计数器/共享变量?这种更复杂的共享对象通常使用基本的同步原语来实现,例如锁/互斥/信号量/等。使用哪个取决于您要实现的内容。

OTOH,您可能提出了一个XY 问题。也许如果您说明您真正想要实现的目标,我们可以为您指出更好/更容易/的解决方案。

于 2015-08-24T20:28:45.320 回答
1

Wait 和 Post 是经典信号量支持的唯一操作。POSIX 信号量可以使用 sem_init() 通过计数来初始化。任何类型的“setValue”函数都会通过允许单元“丢失”来破坏信号量的功能,例如。通过在另一个线程调用“setValue”之前由一个线程发布。

这是一个非常糟糕的主意,这就是它没有实施的原因。

于 2015-08-24T20:05:33.420 回答