单核内存重新排序

Wal*_*orf 5 memory multithreading multicore

大多数关于内存顺序的信息是指多核/多CPU。最近我问了一个关于重新排序的问题,答案是主要发生在多核上。在单核 CPU 上运行一个小测试后:

thread1()
{
 x++;
 y++;
}

thread2()
{
 if (x < y) 
   .... should not happen, because x is incremented first.
}
Run Code Online (Sandbox Code Playgroud)

x < y 在多核弱有序 CPU 上发生得更频繁,但在单核 CPU 上仍会发生。(这是我预料到的,但在大多数文章中都没有提到)

任何经验,确认或解释为什么它不应该发生在单个内核上(尽管它似乎在没有任何编译器优化的情况下发生)?