如果您在一个锁定代码块内有多个共享变量分配,是否一定意味着所有这些更改对其他线程立即可见,一旦它们在同一对象上输入锁定语句就可能在其他处理器上运行 - 或者没有这样保证?
那里的许多示例都显示了一个公共变量的单个“set”或“get”,并详细介绍了内存屏障,但是如果里面有一组更复杂的语句会发生什么?甚至可能执行其他操作的函数调用?
像这样的东西:
lock(sharedObject)
{
x = 10;
y = 20;
z = a + 10;
}
如果此代码在另一个线程上运行,而该线程可能在另一个处理器上执行,它是否对更改的“可见性”做出任何保证?
lock (sharedObject)
{
if (y == 10)
{
// Do something.
}
}
如果答案是否定的——也许并解释这些变化何时会变得可见?