mat*_*ts1 7 c++ multithreading memory-model stdatomic
假设我有2个线程:
int value = 0;
std::atomic<bool> ready = false;
thread 1:
value = 1
ready = true;
thread 2:
while (!ready);
std::cout << value;
这个程序能输出0吗?
我读到了有关C ++内存模型的信息-具体来说,是顺序一致性,我认为这是默认设置,但并不是特别清楚。是仅要求编译器相对于彼此以正确的顺序放置原子操作,还是相对于所有其他操作以正确的顺序放置原子操作?
默认情况下,对原子变量的操作是使用memory_order_seq_cst语义完成的,这保证了不会进行任何重新排序。
因此,行:value = 1不能在原子分配:之下重新排序value = 1,因此该行将std::cout << value;始终显示1。
按照相同的规则,行:std::cout << value;不能在行:
上方重新排序while (!ready);。