25得票1回答
这些seqlock的实现哪些是正确的?

我正在研究Seqlock的实现。然而,我找到的所有来源都有不同的实现方法。 Linux内核 Linux内核是这样实现的: static inline unsigned __read_seqcount_begin(const seqcount_t *s) { unsigned re...

12得票2回答
使用`memory_order_seq_cst`时,GCC是否允许重排序跨越load操作?

我将使用简化版的基本seqlock来进行翻译。当使用-O3编译代码时,gcc会重新排序非原子性加载和跨越原子load(memory_order_seq_cst)的操作。但是,在其他优化级别或使用clang(即使在O3)编译时,不会观察到此重新排序。这种重新排序似乎违反了应该建立的同步关系,并且...