POSIX 信号量上限
POSIX semaphore upper limit
我正在考虑将信号量用作经典计数器。它的起始值为 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 来实现,但是如果类似的事情可以用这种方式完成(代码少一点),我有点感兴趣。
信号量阻塞 waiter/decrementer(消费者)而不是 poster/incrementer。这意味着没有机制可以防止增量超过 5 的发生。因此,如果你想同时阻止 waiter/consumer 和 poster/incrementer(以防止超过 5),你将需要使用互斥锁和条件变量的组合。没有别的办法了。
我正在考虑将信号量用作经典计数器。它的起始值为 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 来实现,但是如果类似的事情可以用这种方式完成(代码少一点),我有点感兴趣。
信号量阻塞 waiter/decrementer(消费者)而不是 poster/incrementer。这意味着没有机制可以防止增量超过 5 的发生。因此,如果你想同时阻止 waiter/consumer 和 poster/incrementer(以防止超过 5),你将需要使用互斥锁和条件变量的组合。没有别的办法了。