代码之家  ›  专栏  ›  技术社区  ›  bartop

fetch-add with-relaxed memory-order会返回唯一值吗?

  •  3
  • bartop  · 技术社区  · 7 年前

    假设n个线程运行以下简单代码:

    int res = num.fetch_add(1, std::memory_order_relaxed);
    

    哪里 num 是:

    std::atomic<int> num = 0;
    

    完全可以假定 res 对于运行代码的每个线程,代码将是不同的,或者对于某些线程,代码可能是相同的?

    1 回复  |  直到 7 年前
        1
  •  4
  •   Brian Bi    7 年前

    对。所有线程都将同意各个线程修改变量的顺序。 num ;执行该行代码的第kth线程肯定会获得值k。使用 std::memory_order_relaxed 但是,这意味着访问 号码 不要相互同步;例如,一个线程可能会修改其他原子变量 x 在它修改之前 号码 ,另一个线程可能会看到对 号码 由前一个线程生成,但随后看到 X .

    推荐文章