旧 C++ 编译器中的防护

Fencing in old C++ compilers

我有一个需要在 gcc 4.4 上编译的多线程应用程序,我不允许使用 c++0x 标志。

我希望变量以原子方式运行,但不幸的是 w/o 我无法在 C++ 中使用 atomic<T> C++0x 标志。

我试过 boost::atomic 但它给我一个错误

ISO C++ forbids declaration of "atomic" with no type

在这些条件下是否有任何其他方法可以实现原子性,我可以使用 fencing - 如果是,那么是否有指南或常用命令来在旧 C++ 中实现 fencing。

正如 Sam Varshavchik 在上面的评论中所建议的那样,使用 POSIX std::mutex 我们可以保护多线程应用程序中的变量。

std::mutex 有点矫枉过正,但它是我们拥有的 gcc 4.4 中最好的。

C++11 atomic 在解决这个问题上做得更好,但只适用于较新的编译器。