【发布时间】:2015-06-06 12:10:50
【问题描述】:
我正在使用semaphore.h,如果n 而不是只有一个插槽可用,我想获得一个信号量。 Posix 本身不提供此功能。我该如何解决这个问题?我一定会使用信号量,没有其他同步方式是可能的。
我正在考虑使用带有单独计数器变量的二进制信号量,但在我看来,这会破坏它的目的。
【问题讨论】:
-
相关:stackoverflow.com/questions/3491762 -- 仅声明本机不支持此功能,但不提供没有 SysV 的替代方案
-
该链接上的答案使用
pthread_mutex_t和pthread_cond_t实现了一个信号量。你不能用那个吗? -
您可以简单地通过尝试等待计数次数来执行
sem_trywait计数,如果任何失败,sem_post的次数与重置计时器成功次数一样多。 (类似地,sem_post只需调用sem_post计数次数。)。如果你想要阻塞等待,你需要在一个结构中有两个信号量,这意味着必须包装所有标准的sem_xxx函数。你能接受吗? -
你可以使用系统 V 信号量而不是 POSIX 信号量吗? SysV 版本更难使用,但我认为它确实支持您描述的行为。
-
感谢您的回复。 @mtijanic,不,这是作业的一部分,看来他们坚持使用信号量(和 posix)。