这篇文章提到单核系统上不会有“memory reorder
”问题:
Two threads being timesliced on a single CPU core won’t run into a reordering problem. A single core always knows about its own reordering and will properly resolve all its own memory accesses. Multiple cores however operate independently in this regard and thus won’t really know about each other’s reordering.
仍以Memory Reordering Caught in the Act的图为例:
其实可以这样理解:单核CPU
系统上,多个线程实际是交替顺序执行的,无法真正做到“并行”。无论两个线程或多个线程的代码如何乱序执行,CPU
知道它们原本应该的执行顺序,一旦这种乱序会改变程序的运行结果,CPU
会做出相应的“补救”措施,比如丢弃结果,重新执行等等,来保证代码会按照应该执行的顺序执行。所以“memory reorder
”问题不会在单核系统上出现。
参考资料:
Why doesn’t the instruction reorder issue occur on a single CPU core?;
preempt_disable的问题。