【发布时间】:2020-02-16 07:41:06
【问题描述】:
我正在阅读有关如何应用这些 C++ 内存模型的信息。 当需要顺序一致的模型而不是获取-发布模型时,我真的很困惑。 例如,让我们检查一下 Dekker 算法 阅读以下教程https://www.think-cell.com/en/career/talks/pdf/think-cell_talk_memorymodel.pdf,推荐使用Dekker算法的顺序一致模型。
看看下面的例子
atomic<bool> f1=false;
atomic<bool> f2=false;
//thread 1
f1.store(true, memory_order_seq_cst);
if (!f2.load(memory_order_seq_cst)) {
// critical section
}
f1.store(false);
//thread 2
f2.store(true, memory_order_seq_cst);
if (!f1.load(memory_order_seq_cst)) {
// critical section
}
f2.store(false);
为什么在这种情况下发布-获取模型不能保证存储和加载操作在没有任何重新排序的情况下发生?
谢谢 乔治
【问题讨论】: