gpt4 book ai didi

c++ - 如何中断无限的 sigtimedwait?

转载 作者:太空狗 更新时间:2023-10-29 20:35:52 24 4
gpt4 key购买 nike

我的程序有一个受 epoll 约束的事件循环(用于 I/O)和条件变量(用于其他消息事件),以及负责捕获信号的工作线程(SIGINTSIGTERMSIGHUP)。 SIGINT , SIGTERM , SIGHUPSIGPIPE在所有其他线程中被阻塞。

我的 epoll_wait调用有 500 毫秒超时,但我正在尝试减少上下文切换并使用无限 epoll_wait相反,当主线程决定是时候退出程序并且应该停止事件循环时,由管道事件唤醒。

同样,我的sigtimedwait调用有 500 毫秒超时(并在每次调用后检查 std::atomic<bool>,看它是否需要停止),我想用不需要保持唤醒来检查中断的东西替换它。

我可以从主线程向信号观察线程发出信号来实现这个或类似的目的吗?还是有更好的方法来捕捉当今时代的信号?

这是在 CentOS 6 和 7 上进行的(尽管首选通用 POSIX 解决方案——标准 C++11 的加分点!)。

最佳答案

使用signal file descriptors ,而不是信号处理程序。

信号的接收不再是信号处理程序,而是通过读取文件描述符来完成,该文件描述符是可轮询的,并且可以作为 epoll 集的一部分进行处理。

是的,在当今时代,这是在 Linux 上捕获信号的更好方法。

关于c++ - 如何中断无限的 sigtimedwait?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40564227/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com