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