我正在研究利用信号量作为经典计数器。它的起始值为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实现,但是如果类似的事情可以用这种方式完成的话,我有点兴趣(代码少了一些)。
答案 0 :(得分:1)
信号量阻止服务员/减量者(消费者)而不是海报/增量者。这意味着没有机制可以防止增量超过5。因此,如果您想要阻止服务员/消费者和海报/增量器(以防止超过5),您将需要使用互斥和条件变量的组合。没有其他办法。