POSIX 线程:我有两个使用两个不同线程调用的函数。在线程中正在使用条件等待,而在其他正在发送信号条件。由于任何线程都可以提前执行,因此即使未调用 wait 也可以发送信号。我想保存已发送的信号,以便在调用 wait 时同一进程的其他线程可以使用之前调用的信号。在POSIX中有什么办法吗?
问问题
90 次
2 回答
1
如果没有服务员,POSIX 条件变量信号会丢失。此外,虚假信号可能会提前结束等待。这就是为什么人们应该总是在循环中等待状态变化while
,而不是单独等待条件变量信号。
对于您的特定任务,您可能可以使用信号量之类的东西。
于 2012-09-10T10:14:42.367 回答
0
仅等待条件不足以同步线程。正如 Maxim 已经说过的,信号可能会丢失或无故发送。
您需要在线程之间传递其他信息。这通常通过队列来完成。但在简单的情况下,当只需要一个触发器时,一个int
as 计数器可能就足够了。
大概是这样的:
发件人:
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 回答