Met*_*est 19 c atomic volatile c++11
我需要在我的程序中有原子变量.以前我在使用std::atomic<int>,但我现在正在使用的平台没有支持C++ 0x的g ++编译器.我使用volatile int它似乎正在工作,因为我还没有在多核系统中遇到竞争条件我正在测试它.
std::atomic<int>
volatile int
我的问题是,如果volatile int是原子一样std::atomic<int>?此外,它是否会产生内存障碍(我也需要)?
jal*_*alf 28
号volatile无关,多线程.它不强制记忆障碍(尽管一些编译器可能会选择添加反正),它不做任何保证有关的读/写相对于非易失性对象重新排序.
volatile
volatile被添加以支持写入内存映射硬件I/O寄存器,以及这种情况,重要的是你的写入没有被优化,但没有精确的顺序保证wrt.需要非易失性读/ wrties.
您可能还想阅读此内容
bdo*_*lan 6
volatile变量并不意味着记忆障碍,不具备exchange或compare_exchange_*的操作std::atomic.它们确实避免了编译器在机器代码级别上将负载提升到多个负载(反之亦然,并且类似于商店),但就是这样.
exchange
compare_exchange_*
std::atomic
您可能对这些文章感兴趣:
如果没有std::atomic,可能需要使用boost :: atomic,或使用您正在使用的任何编译器提供的低级屏障和原子操作原语.
Vin*_*ura 4
我看到你在一些评论中询问 GCC,就在这里。
GCC 用于原子内存访问的内置函数
归档时间:
15 年,2 月 前
查看次数:
6041 次
最近记录: