既然上下文切换可能发生在指令执行过程中的任何一点,我现在想知道为什么“部分有问题”的代码(这两条指令)有意义,如果上下文切换可以在任何指令之间发生,我们可能会第二条指令中的不同 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。
(这与此 question 相关)
最佳答案
无法保证 MemoryBarrier
周围是否会发生上下文切换。这些是正交概念。
关于c# - 尝试理解 Thread.MemoryBarrier() 和上下文切换之间的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7260758/