在MacOS中替换sem_getvalue()的方法是什么?

时间:2019-07-14 12:58:05

标签: c macos semaphore

我有一个使用未命名信号量和线程连接的代码。我想在MacOS中对其进行编译,但是我发现MacOS不支持未命名的信号量,而调度信号量可以替代它。 在我的代码中,有一点我想发布信号量,直到信号量计数器等于零,因此我使用sem_getvalue()函数。这是我的代码

sem_getvalue(&(event), &res);
while (res <= 0) {
   sem_post(&(tcp_client->resp_event));
   res++;
} 

1。是否可以使用调度信号来处理此问题?

2。在MacOS中,有没有更好的方法来替换未命名的信号量?

1 个答案:

答案 0 :(得分:3)

要使用信号量,这是一件非常令人怀疑的事情。它建议您应该使用其他同步机制,也许是条件锁定。

也就是说,不,调度信号不会直接提供这样的机制。但是信号量是一个非常基本的同步原语,几乎可以在其上构建任何其他同步方案。但是,为了让我们提出建议,我们需要知道您使用它的目的。例如,您在什么情况下会像这样“重置”您的信号量,为什么?