【问题标题】:Implementation of Dekker's algoirthm with atomic用原子实现 Dekker 算法
【发布时间】: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);

为什么在这种情况下发布-获取模型不能保证存储和加载操作在没有任何重新排序的情况下发生?

谢谢 乔治

【问题讨论】:

    标签: c++ c++11 memory


    【解决方案1】:

    这里的内存操作确实发生在没有在单个线程内重新排序的情况下。但是,线程之间没有保证。要实现所需的行为,您必须使用 atomic compare exchange 函数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-28
      • 1970-01-01
      • 2012-10-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多