gpt4 book ai didi

c++信号处理程序可以唤醒线程吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:21:36 26 4
gpt4 key购买 nike

由于 C++ 信号处理程序应该只访问 volatile std::sig_atomic_t 或 std::atomic(自 C++11 起),是否可以让线程随其休眠和唤醒?

std::atomic_bool exit_now(false);

void signal_handler(int signal)
{
exit_now=true;
}

int main() {

std::signal(SIGINT, signal_handler);

A a;
B b;

a.RunAsync();
b.RunAsync();

while(!exit_now)
std::this_thread::sleep_for(std::chrono::seconds(1));

a.Stop();
b.Stop();

return 0;
}

在这种情况下,A 和 B::RunAsync() 都在其他线程上处理它们的业务,直到我调用::Stop(),所以我唯一的选择是在主线程上忙等待(有或没有预定义的 sleep 期)。

理想情况下,我希望主线程休眠直到发出信号,可能带有条件变量,但这看起来是非法的。

最佳答案

我会建议(阻塞信号和)使用 sigwait(2) 在主线程中同步等待信号,这样您就可以完全避免必须从信号处理程序到线程进行通信的问题。

关于c++信号处理程序可以唤醒线程吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25432990/

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