由于看起来上下文切换可能发生在指令执行的任何时候,我现在想知道为什么代码“部分有问题”(这两条指令)是有意义的,如果上下文切换可以在任何指令之间发生并且我们可能在不同的 CPU 上第二条指令的核心。
void B()
{
Thread.MemoryBarrier(); // Barrier 3
if (_complete)
{
//PART IN QUESTION
Thread.MemoryBarrier(); // Barrier 4
Console.WriteLine (_answer);
//END PART IN QUESTION
}
}
此处对 MemoryBarrier 的描述似乎并未保证MemoryBarrier在调用它后不会切换 CPU。
(这与这个问题有关)