memory_order_seq_cst顺序一致性的代价
memory_order_seq_cst(顺序一致性)是最高级别内存序。它到底保证了什么?为什么说它性能最差?在x86和ARM架构下seq_cst的实现差异是什么?
回答
我还是少年
memory_order_seq_cst保证:在全局视角上,所有线程看到的所有seq_cst原子操作顺序完全一致(单一全序)。每个线程中seq_cst操作之间的相对顺序与程序顺序相同,所有seq_cst操作形成全序。实现代价:x86架构——seq_cst store需要使用mfence或xchg指令(比普通mov慢),load操作与acquire类似使用普通mov(但编译器不重排);ARM架构——需要dmb ish完整内存屏障指令,开销更大。性能:seq_cst比acquire/release慢(尤其ARM架构下严重)。现代处理器多核间的缓存一致性协议(MESI等)本身不保证全局序,seq_cst需要额外屏障。建议:仅在必须保证严格全局可见顺序时才使用seq_cst,大多数场景acquire-release足够。