【发布时间】:2014-08-21 17:59:23
【问题描述】:
由于 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() 之前都在其他线程上执行它们的业务,所以我唯一的选择是在主线程上忙等待(有或没有预定义的睡眠期)。
理想情况下,我希望主线程在收到信号之前一直休眠,可能带有条件变量,但这看起来是非法的。
【问题讨论】:
标签: c++ multithreading signals