1

POSIX 线程:我有两个使用两个不同线程调用的函数。在线程中正在使用条件等待,而在其他正在发送信号条件。由于任何线程都可以提前执行,因此即使未调用 wait 也可以发送信号。我想保存已发送的信号,以便在调用 wait 时同一进程的其他线程可以使用之前调用的信号。在POSIX中有什么办法吗?

4

2 回答 2

1

如果没有服务员,POSIX 条件变量信号会丢失。此外,虚假信号可能会提前结束等待。这就是为什么人们应该总是在循环中等待状态变化while,而不是单独等待条件变量信号。

对于您的特定任务,您可能可以使用信号量之类的东西。

于 2012-09-10T10:14:42.367 回答
0

仅等待条件不足以同步线程。正如 Maxim 已经说过的,信号可能会丢失或无故发送。

您需要在线程之间传递其他信息。这通常通过队列来完成。但在简单的情况下,当只需要一个触发器时,一个intas 计数器可能就足够了。

大概是这样的:

发件人:

get_lock();
counter++;
release_lock();

接收者:

while(1){
  get_lock();
  while(counter==0)
     wait_on_lock();
  counter--;
  release_lock();
  do_work();
}
于 2012-09-10T17:54:30.753 回答