小编lan*_*984的帖子

对原子类感到困惑:memory_order_relaxed

我正在研究这个网站:https://gcc.gnu.org/wiki/Atomic/GCCMM/AtomicSync,这对了解有关原子类的主题非常有帮助.

但这个关于放松模式的例子很难理解:

    /*Thread 1:*/

    y.store (20, memory_order_relaxed)
    x.store (10, memory_order_relaxed)
    /*Thread 2*/
 if (x.load (memory_order_relaxed) == 10)
      {
        assert (y.load(memory_order_relaxed) == 20) /* assert A */
        y.store (10, memory_order_relaxed)
      }
 /*Thread 3*/
     if (y.load (memory_order_relaxed) == 10)
        assert (x.load(memory_order_relaxed) == 10) /* assert B */
Run Code Online (Sandbox Code Playgroud)

对我来说断言B应该永远不会失败,因为x必须是10且y = 10,因为线程2已经以此为条件.

但网站上说这个例子中的断言实际上可能是失败的.

c++ multithreading atomic memory-model thread-safety

6
推荐指数
2
解决办法
238
查看次数