C++ 为什么不是';是否不执行释放操作?

C++ 为什么不是';是否不执行释放操作?,c++,multithreading,c++11,concurrency,memory-barriers,C++,Multithreading,C++11,Concurrency,Memory Barriers,引用自C++并发操作清单5.9 Afetch\u sub 使用内存\u顺序\u获取语义的操作与任何内容都不同步, 即使它存储了一个值,因为它不是一个释放操作。同样,一家商店 无法与fetch\u或memory\u order\u release语义同步,因为 fetch\u或的读取部分不是获取操作 我很难理解上面这段话。如果afetch\u sub 使用memory\u order\u acquire语义的操作与任何东西都不同步,为什么fetch\u sub的接口为我们留下一个内存顺序参数,如下

引用自C++并发操作清单5.9

A
fetch\u sub
使用
内存\u顺序\u获取
语义的操作与任何内容都不同步,
即使它存储了一个值,因为它不是一个释放操作。同样,一家商店
无法与
fetch\u或
memory\u order\u release
语义同步,因为
fetch\u或
的读取部分不是获取操作

我很难理解上面这段话。如果a
fetch\u sub
使用
memory\u order\u acquire
语义的操作与任何东西都不同步,为什么
fetch\u sub
的接口为我们留下一个内存顺序参数,如下所示

T fetch_sub(T arg,std::memory_order=std::memory_order_seq_cst)无异常

  • “与同步”是单向的,不可交换。“A与B同步”并不意味着“B与A同步”(事实上,恰恰相反),这与人们从英语中所期望的不同。因此,
    memory\u order\u acquire
    RMW操作不能与任何东西同步,但是
    memory\u order\u release
    存储与从存储读取值的
    memory\u order\u acquire
    RMW操作同步。类似地,
    内存顺序释放
    存储不与
    内存顺序释放
    RMW同步,而
    内存顺序释放
    RMW可以与
    内存顺序获取
    加载同步
  • memory\u order\u acq\u rel

  • 所以只有
    release
    可以与
    acquire
    同步,这是真的吗?@bigxiao,
    memory\u order\u seq\u cst
    也与
    acquire
    同步。