【问题标题】:How to set POSIX semaphore value to 1?如何将 POSIX 信号量值设置为 1?
【发布时间】:2015-11-18 08:50:26
【问题描述】:

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

【问题讨论】:

  • @FilipeGonçalves:在已经初始化的信号量上调用 sem_init 会导致未定义的行为。您可以先将其销毁,但如果您在销毁它时可以同时发布或等待,这也会导致未定义的行为。基本上 OP 所要求的完全是错误的。

标签: c posix semaphore binary-semaphore


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    OTOH,您可能正在展示XY-problem。也许如果您说明您真正想要实现的目标,我们可以为您指出更好/更容易/的解决方案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-09
      • 1970-01-01
      • 1970-01-01
      • 2015-11-16
      • 2015-05-16
      • 2011-09-13
      相关资源
      最近更新 更多