gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 14:55:21 24 4
gpt4 key购买 nike

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

最佳答案

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

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

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

关于c - 如何等待 pthread 条件变量或信号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45943240/

24 4 0
文章推荐: javascript - 如何在 javascript 中更改按钮大小
文章推荐: c# - 来自 web api : access_denied error 的谷歌身份验证
文章推荐: c# - 反射,将 List 转换为 IEnumerable