C中的volatile int和C++ 0x的std :: atomic <int>一样好吗?

Met*_*est 19 c atomic volatile c++11

我需要在我的程序中有原子变量.以前我在使用std::atomic<int>,但我现在正在使用的平台没有支持C++ 0x的g ++编译器.我使用volatile int它似乎正在工作,因为我还没有在多核系统中遇到竞争条件我正在测试它.

我的问题是,如果volatile int原子一样std::atomic<int>?此外,它是否会产生内存障碍(我也需要)?

jal*_*alf 28

volatile无关,多线程.它不强制记忆障碍(尽管一些编译器可能会选择添加反正),它不做任何保证有关的读/写相对于非易失性对象重新排序.

volatile被添加以支持写入内存映射硬件I/O寄存器,以及这种情况,重要的是你的写入没有被优化,但没有精确的顺序保证wrt.需要非易失性读/ wrties.

您可能还想阅读此内容

  • `std :: atomic`是否对非原子访问强加了排序要求? (6认同)

bdo*_*lan 6

volatile变量并不意味着记忆障碍,不具备exchangecompare_exchange_*的操作std::atomic.它们确实避免了编译器在机器代码级别上将负载提升到多个负载(反之亦然,并且类似于商店),但就是这样.

您可能对这些文章感兴趣:

如果没有std::atomic,可能需要使用boost :: atomic,或使用您正在使用的任何编译器提供的低级屏障和原子操作原语.

  • 你可以试试这个:http://gcc.gnu.org/onlinedocs/gcc-4.1.2/gcc/Atomic-Builtins.html,也可以http://stackoverflow.com/questions/165931/thread-safe-atomic -operations,在海湾合作委员会 (2认同)

Vin*_*ura 4

我看到你在一些评论中询问 GCC,就在这里。

GCC 用于原子内存访问的内置函数