我有一个多线程Linux应用程序,需要在响应SIGTERM
时顺利终止。
它当前实现的方式使用std::promise<void>
和相关的未来:主线程首先安装一个简单的SIGTERM
处理程序,设置promise和return,然后启动所有子线程,然后等待未来。收到SIGTERM
时,处理程序会设置承诺。这将解除对主线程的阻塞,主线程控制子线程的有序关闭,然后退出。
这一切都很好 - 但据我所知,实际上并不能保证使用std::promise::set_value()
是安全的(或者,就此而言,任何其他C ++ 11同步机制)在信号处理程序中。
这在实践中是否真的有风险?我应该用例如sem_post
或其他明确描述为安全的机制?