Linux信号处理程序中的C ++ 11同步

时间:2018-05-30 09:57:25

标签: linux c++11 signals

我有一个多线程Linux应用程序,需要在响应SIGTERM时顺利终止。

它当前实现的方式使用std::promise<void>和相关的未来:主线程首先安装一个简单的SIGTERM处理程序,设置promise和return,然后启动所有子线程,然后等待未来。收到SIGTERM时,处理程序会设置承诺。这将解除对主线程的阻塞,主线程控制子线程的有序关闭,然后退出。

这一切都很好 - 但据我所知,实际上并不能保证使用std::promise::set_value()是安全的(或者,就此而言,任何其他C ++ 11同步机制)在信号处理程序中。

这在实践中是否真的有风险?我应该用例如sem_post或其他明确描述为安全的机制?

0 个答案:

没有答案