引用自 C++并发操作 $ list 5.9



我很难理解上面的段落。如果是fetch_sub带有memory_order_acquire语义的操作无法进行任何同步操作,为什么fetch_sub的接口(interface)为我们留下了如下的存储顺序参数?
T fetch_sub( T arg, std::memory_order order = std::memory_order_seq_cst ) noexcept;

最佳答案

  • 与“同步”是单向的,而不是可交换的。 “A与B同步”并不意味着“B与A同步”(实际上恰恰相反),这与英语可能有所不同。因此,memory_order_acquire RMW操作无法与任何内容同步,但是memory_order_release存储与获取从存储中读取的值的memory_order_acquire RMW操作同步。同样,虽然memory_order_release存储区不与memory_order_release RMW同步,但memory_order_release RMW可以与memory_order_acquire负载同步。
  • memory_order_acq_rel
  • 关于c++ - 为什么fetch_sub不执行释放操作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50500443/

    10-11 19:13
    查看更多