C POSIX信号量上限

C POSIX信号量上限,c,posix,semaphore,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\u post的函数可以做到这一点。

我正在研究如何利用信号量作为经典计数器。它的起始值为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\u post的函数可以做到这一点。现在,我知道这个行为可以用互斥和int实现,但我有点感兴趣的是,类似的事情是否可以这样做(代码少一点)。

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

对,我不是真的想阻止帖子,而是让
sem\u帖子
什么都不做。显然,正如你所建议的那样,这是不可能的。我将退回到手动操作,因为编写它确实是一件小事;)谢谢