如何解决seq_cst vs x86上的发布存储
为什么具有以下功能:
#include <atomic>
void store_release(std::atomic<int>& location,int val) {
location.store(val,std::memory_order_release);
}
void store_seq_cst(std::atomic<int>& location,int val) {
location.store(val,std::memory_order_seq_cst);
}
在x86-64(godbolt)上的编译方式有所不同:
store_release(std::atomic<int>&,int):
mov DWORD PTR [rdi],esi
ret
store_seq_cst(std::atomic<int>&,int):
xchg esi,DWORD PTR [rdi]
ret
即使C ++标准声明以std::memory_order_seq_cst
顺序存储操作也会在受影响的内存位置执行释放操作?引用29.3顺序和一致性:
(1.2)memory_order_release,memory_order_acq_rel和memory_order_seq_cst:存储操作对受影响的内存位置执行释放操作
- 如何保证
xchg
指令具有mov
不具有指令? - 为什么seq_cst命令需要这些保证?
- 在这两种情况下,商店的可见性(实际上)会有所不同?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。