如何将 POSIX 信号量值设置为 1?
Posted
技术标签:
【中文标题】如何将 POSIX 信号量值设置为 1?【英文标题】:How to set POSIX semaphore value to 1? 【发布时间】:2015-11-18 08:50:26 【问题描述】:我正在用 c 语言实现信号量。我有一个 POSIX 计数信号量。我想给它赋值。而且我不想使用等待或发布。我可以这样做吗? POSIX Semaphore 是否有类似“setValue”的功能?
【问题讨论】:
sem_init(3)
@FilipeGonçalves:在已经初始化的信号量上调用 sem_init
会导致未定义的行为。您可以先将其销毁,但如果您在销毁它时可以同时发布或等待,这也会导致未定义的行为。基本上 OP 所要求的完全是错误的。
【参考方案1】:
Wait 和 Post 是经典信号量支持的唯一操作。 POSIX 信号量可以使用 sem_init() 通过计数来初始化。任何类型的“setValue”函数都会通过允许单元“丢失”来破坏信号量的功能,例如。在另一个线程调用“setValue”之前由一个线程发布。
这是一个非常糟糕的主意,这就是它没有实施的原因。
【讨论】:
【参考方案2】:如果您可以在正常操作期间直接更改其值(即除了初始化之外),它就不再是信号量了。所以你可能正在寻找不同的东西,也许是线程安全的计数器/共享变量?这种更复杂的共享对象通常使用基本的同步原语来实现,例如锁/互斥/信号量/等。使用哪个取决于您要实现的内容。
OTOH,您可能正在展示XY-problem。也许如果您说明您真正想要实现的目标,我们可以为您指出更好/更容易/的解决方案。
【讨论】:
以上是关于如何将 POSIX 信号量值设置为 1?的主要内容,如果未能解决你的问题,请参考以下文章