POSIX 信号量上限
Posted
技术标签:
【中文标题】POSIX 信号量上限【英文标题】:POSIX semaphore upper limit 【发布时间】:2018-01-19 18:08:21 【问题描述】:我正在研究将信号量用作经典计数器。它的起始值为 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】:信号量阻止服务员/递减器(消费者)而不是发布者/递增器。这意味着没有机制可以防止发生超过 5 的增量。因此,如果您想同时阻止服务员/消费者和海报/增量器(以防止超过 5),您将需要使用互斥锁和条件变量的组合。没有其他办法。
【讨论】:
对,我并不是真的要阻止帖子,而是让sem_post
什么都不做。显然,正如您所建议的,这是不可能的。我将退回到手动操作,因为编写起来真的很简单;)谢谢!以上是关于POSIX 信号量上限的主要内容,如果未能解决你的问题,请参考以下文章