2015-06-08 31 views
0

我目前需要一个原子变量来干净地退出我的多线程程序。 在接收到一个信号(例如SIGINT)后,原子变量设置为false,我的线程退出,加入主程序,我有一个干净的退出。除C++ 11和boost之外的原子变量

但是我不能使用C++ 11(用C++ 11编译会导致太多的编译错误)。
我目前的boost库(版本1.51)不支持原子变量。

  1. 我还有其他选择吗?
  2. 我什至需要一个原子变量,因为它是在一个位置只设置和读取其他地方
+1

也许你应该检查*为什么*在编译启动C++ 11时出现编译错误,也许它只是一个缺少的头文件?另外,我会争辩说一个简单的布尔变量就足够了。 –

+1

我同意@JoachimPileborg,在2015年,C++ 11 **必须**编译。 – Bastien

+0

给出编译器错误的部分与问题完全无关(并且比我当前拥有的时间更费时间修复)@JoachimPileborg –

回答

0

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

给升压/间/详细查看/ atomic.hpp

+0

boost原子被引入1.53以上 –

+0

事实上,我所指的是从1.38版本的boost :: interprocess实现中“偷走”的东西 – marom

0

其实,类型,你都应该在C++中的C++ 03的信号处理程序使用以及11个/ 14 sig_atomic_t

信号处理程序对允许的类型的要求比线程更强,因为它们不能阻塞。另外,尽管pre ++ 11没有多线程内存模型,但几十年来可以编写线程安全代码(例如根据POSIX标准)。因此,无论如何,如果你使用pthreads,你可能不必担心纯粹的C++ 03标准保证了什么(或者更确切地说它不保证),而是应该看看POSIX和/或gcc文档。

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

对于标志,其在信号处理程序中设置,它足以使用volatile bool(或volatile int)类型。 Atomic在这种情况下没有增加任何内容。