linux - Linux 信号处理程序中的 C++11 同步
问题描述
我有一个多线程 Linux 应用程序,它需要平滑终止以响应SIGTERM
.
它当前实现的方式使用了一个std::promise<void>
相关的未来:主线程首先安装一个简单的SIGTERM
处理程序来设置承诺并返回,然后它启动所有子线程,然后它等待未来。收到SIGTERM
时,处理程序设置承诺。这解除了主线程的阻塞,主线程控制了子线程的有序关闭,然后退出。
这一切都很好——但据我所知,实际上并不能保证std::promise::set_value()
在信号处理程序中使用(或者,就此而言,任何其他 C++11 同步机制)是安全的。
这在实践中真的有风险吗?我应该用例如sem_post
或其他明确描述为安全的机制替换它吗?
解决方案
推荐阅读
- postgresql - 如何将 postgres 中 ksuid 的默认值赋予列?postgres中是否有ksuid的替代品?
- r - 使用 ggplotly() 时删除构面之间的空白
- java - Spring JPA 实体映射 LocalDate 和 LocalDateTime 字段到 Sql Server
- dataweave - Mulesoft 条件语句
- terraform - 如何在 terraform 代码中访问 terragrunt 变量
- ubuntu - 即使我正确输入密码,Oracle VirtualBox Ubuntu OS 也无法打开我的虚拟机
- amazon-web-services - AWS 连接超时 + EC2 实例连接不起作用
- c# - 源更改时如何更新 Xamarin 数据绑定
- html - 多个绝对定位元素重叠
- r - 如何在棒棒糖图形上添加图例?