不理解 std::sync::atomic::Ordering 中的内存排序,请教大家

💡 原文中文,约400字,阅读约需1分钟。
📝

内容提要

AtomicU8 的使用中,Ordering::SeqCst 与 Ordering::Relaxed 等其他排序方式的区别,编译重排和硬件重排可能导致代码执行乱序,硬件重排指 store buffer 和 invalidate queue,Ordering 与内存屏障的关系不清楚。

🎯

关键要点

  • AtomicU8 的使用中,Ordering::SeqCst 与 Ordering::Relaxed 等其他排序方式的区别不明确。
  • 编译重排和硬件重排可能导致代码执行乱序。
  • 硬件重排是为了不阻塞而设计的,包括 store buffer 和 invalidate queue。
  • 如果不加以控制,可能会出现指令执行和内存读取的乱序情况。
  • 需要理解 Ordering 与内存屏障的关系,并希望得到例子帮助理解。
➡️

继续阅读