c++11和boost之外的原子变量
Atomic variables other than c++11 and boost
我目前需要一个原子变量来干净地退出我的多线程程序。在接收到信号(如SIGINT(时,原子变量被设置为false,我的线程退出,加入主程序,我有一个干净的退出。
然而,我不能使用C++11(使用C++11进行构建会导致太多编译错误(
我当前的boost库(1.51版本(不支持原子变量。
- 我还有其他选择吗
- 我甚至需要一个原子变量吗,因为它只设置在一个位置,而在其他位置读取
到目前为止,我知道boost库的版本应该支持原子变量。
查看boost/interprocess/detail/atomic.hpp
实际上,您应该在C++03和C++11/14中的信号处理程序中使用的类型是sig_atomic_t
。
信号处理程序对允许的类型的要求甚至比线程更强,因为它们不能阻塞。
此外,虽然前c++11没有多线程内存模型,但几十年来编写线程安全代码(例如,根据POSIX标准(是可能的。因此,如果您无论如何都在使用pthreads,那么您可能不必担心纯c++03标准能保证什么(或者更确切地说,它不能保证什么(,而是应该查看POSIX和/或gcc文档。
- 我甚至需要一个原子变量吗,因为它只设置在一个位置,而在其他地方读取
对于在信号处理程序中设置的标志,使用volatile bool
(或volatile int
(类型就足够了。Atomic
在这种情况下没有添加任何内容。
相关文章:
- C++Boost Asio Pool线程,带有lambda函数和传递引用变量
- boost xml parsingl将xml的路径作为变量发送
- C++ 和 Boost.Python - 如何将变量公开给 python 并在循环中更新它?
- 如何使用 Boost.Hana 声明成员变量
- 如何使用boost图作为成员变量
- C++11 - 获取编译时的所有类变量,并在没有 Boost 的情况下为它们调用方法
- 使用 boost python 从 c++ 为 python 中的类成员变量赋值
- Boost Log:变量不是"boost::log::v2s_mt_posix::trivial"的
- 如何使用boost :: program_options提取环境变量
- 使用Boost Spirit将默认值分配给变量
- 如何在 setter 方法中设置 boost::optional 成员变量的值?
- 如何正确使用带有公共成员变量的类型 boost::可选?
- 使用boost ::日志配置文件变量
- Boost Python:在函数中通过引用传递变量时出错
- 为什么我的变量在单独的线程中修改时没有改变?C++/boost
- boost ::绑定发送变量的回调args到回调函数
- 带有原始指针的boost :: shared_ptr变量的条件初始化
- boost::shared_ptr,继承后访问变量
- 如果插槽对象包含互斥锁和条件变量,则 Boost signals2 connect() 调用编译失败
- 将整数分配给由 boost::variant 生成的自动变量