Rust.cc

Rust.cc -

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

在开发中用到了 AtomicU8,但只会用 Ordering::SeqCst,不知道原理,更不知道和 Ordering::Relaxed 等其他排序方式的区别。 于是,跟着官方文档读了 nomicon,了解了编译重排和硬件重排会让代码执行出现乱序的情况。 读完又读了 <Why Memory Barriers?>,知道硬件重排是指为了不阻塞而设计了 store buffer 和 invalidate queue,如果不加以控制就会出现指令执行和内存读取的乱序情况。 最后,试着把这些联系起来理解,但是没明白。 所以请教大家:怎么联系和理解 Ordering 与内存屏障的关系?能不能举个例子?

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

AtomicU8 Ordering invalidate queue store buffer 内存 重排

相关推荐 去reddit讨论

热榜 Top10

eolink
eolink
LigaAI
LigaAI
Dify.AI
Dify.AI
观测云
观测云

推荐或自荐