在他的伟大著作《C++ Concurrency in Action》中,Anthony Williams写道(第309页):
例如,在x86和x86-64架构上,原子加载操作始终相同,无论是标记为memory_order_relaxed还是memory_order_seq_cst(参见5.3.3节)。这意味着使用松散内存顺序编写的代码可能适用于具有x86架构的系统,在具有更精细的内存顺序指令集(如SPARC)的系统上则会失败。
我理解得对吗?在x86架构上,所有原子加载操作都是memory_order_seq_cst吗?此外,在cppreference的std::memory_order网站上提到,在x86上,发布-获取排序是自动的。
如果这个限制是有效的,那么这些排序是否仍然适用于编译器优化?
例如,在x86和x86-64架构上,原子加载操作始终相同,无论是标记为memory_order_relaxed还是memory_order_seq_cst(参见5.3.3节)。这意味着使用松散内存顺序编写的代码可能适用于具有x86架构的系统,在具有更精细的内存顺序指令集(如SPARC)的系统上则会失败。
我理解得对吗?在x86架构上,所有原子加载操作都是memory_order_seq_cst吗?此外,在cppreference的std::memory_order网站上提到,在x86上,发布-获取排序是自动的。
如果这个限制是有效的,那么这些排序是否仍然适用于编译器优化?