如何等待pthread条件变量或信号?

时间:2017-08-29 15:40:01

标签: c pthreads signals posix

我想等待一个pthread条件变量,但是当我得到一个SIGUSR1(或任何其他信号)时,我想停止等待并检测到它因信号而停止等待,而不是因为pthread_cond_signal或虚假唤醒。我怎么能这样做?

1 个答案:

答案 0 :(得分:1)

在pthreads程序中处理信号的一种可靠方法是屏蔽您希望在每个线程中处理的所有信号,并创建一个专用的信号处理线程,该线程围绕调用sigwaitinfo()(或sigtimedwait() )。

然后,信号处理线程可以使用普通的互斥保护共享变量和pthread_cond_signal() / pthread_cond_broadcast()唤醒来通知其他线程收到的信号。

在您的示例中,专用信号处理线程可以设置(互斥保护)标志,指示已收到SIGUSR1,然后发出线程正在等待的条件变量的信号。等待线程除了pthread_cond_wait()周围的循环中的其他共享状态外,还需要检查信号标志。