不理解 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 与内存屏障的关系,并希望得到例子帮助理解。
➡️