c++11和boost之外的原子变量

Atomic variables other than c++11 and boost

本文关键字:变量 boost c++11      更新时间:2023-10-16

我目前需要一个原子变量来干净地退出我的多线程程序。在接收到信号(如SIGINT(时,原子变量被设置为false,我的线程退出,加入主程序,我有一个干净的退出。

然而,我不能使用C++11(使用C++11进行构建会导致太多编译错误(
我当前的boost库(1.51版本(不支持原子变量。

  1. 我还有其他选择吗
  2. 我甚至需要一个原子变量吗,因为它只设置在一个位置,而在其他位置读取

到目前为止,我知道boost库的版本应该支持原子变量。

查看boost/interprocess/detail/atomic.hpp

实际上,您应该在C++03和C++11/14中的信号处理程序中使用的类型是sig_atomic_t

信号处理程序对允许的类型的要求甚至比线程更强,因为它们不能阻塞。

此外,虽然前c++11没有多线程内存模型,但几十年来编写线程安全代码(例如,根据POSIX标准(是可能的。因此,如果您无论如何都在使用pthreads,那么您可能不必担心纯c++03标准能保证什么(或者更确切地说,它不能保证什么(,而是应该查看POSIX和/或gcc文档。

  1. 我甚至需要一个原子变量吗,因为它只设置在一个位置,而在其他地方读取

对于在信号处理程序中设置的标志,使用volatile bool(或volatile int(类型就足够了。Atomic在这种情况下没有添加任何内容。