POSIX信号量上限

时间:2018-01-19 18:08:22

标签: c posix semaphore

我正在研究利用信号量作为经典计数器。它的起始值为5,可能会降至0,但不能超过5。

sem_t sem;
sem_init(&sem, 0, 5);

// ...

sem_wait(&sem); // goes down to 4

//...

sem_post(&sem); // goes up to 5
sem_post(&sem); // goes up to 6 ?! 

我开始考虑文档了,但我没有看到任何类似sem_post的功能。现在,我知道这种行为可以通过mutex和int实现,但是如果类似的事情可以用这种方式完成的话,我有点兴趣(代码少了一些)。

1 个答案:

答案 0 :(得分:1)

信号量阻止服务员/减量者(消费者)而不是海报/增量者。这意味着没有机制可以防止增量超过5。因此,如果您想要阻止服务员/消费者和海报/增量器(以防止超过5),您将需要使用互斥和条件变量的组合。没有其他办法。