【发布时间】:2016-06-02 21:40:52
【问题描述】:
我知道这不是一个新问题,但在阅读了有关 c++11 内存栅栏后我感到困惑;
如果我有一个读者线程和一个作者线程。
可以用普通的int吗?
int x = 0; // global
writer reader
x = 1; printf("%d\n", x);
这种行为是否未定义?
我可以在阅读器线程中获得未定义的值吗?
或者就像使用std::atomic_uint_fast32_t 或std::atomic<int>?因此,该值最终会到达阅读器线程。
std::atomic<int x = 0; // global
writer reader
x.store(1, std::memory_order_relaxed); printf("%d\n", x.load(std::memory_order_relaxed));
答案是否取决于我使用的平台? (例如 x86),那么加载/存储普通的int 是一条 CPU 指令?
如果两种行为相似,我是否应该期望两种类型的性能相同?
【问题讨论】:
标签: c++ multithreading c++11 atomic memory-fences