在下面的代码中将read1
始终等于read2
,提供的属性Flag
可以从其他线程更改吗?这里担心的是Flag
可能会被内联。
private bool Flag {get; set;}
public void MultithreadedMethod()
{
var read1 = Flag;
/* some more code */
var read2 = Flag;
}
UPD:其他一些线程可能会在执行Flag
期间更改 ' 值。/* some more code */
在这种情况下read1
应该不同于read2
. 会一直这样吗?尽管事实在读取之间发生了变化,但内联不会将属性变成一个非易失性字段,这将导致read1
等于?read2
Flag