首页 > 解决方案 > Linux 信号处理程序中的 C++11 同步

问题描述

我有一个多线程 Linux 应用程序,它需要平滑终止以响应SIGTERM.

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

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

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

标签: linuxc++11signals

解决方案


推荐阅读