在Java中,如果您在加入突变线程后仅访问字段,则不需要使其易失性;加入强制执行先于关系。
那么在C#中呢?通过以下代码,调用Join()后是否保证看到更新的_value值,还是我需要将_value设置为易失性?
在我的代码片段中,"BAR" 总是会被打印出来吗?
那么在C#中呢?通过以下代码,调用Join()后是否保证看到更新的_value值,还是我需要将_value设置为易失性?
private String _value = "FOO"
public void Foo()
{
Thread myThread = new Thread(Bar);
myThread.Start();
myThread.Join();
Console.WriteLine("[Main Thread] _val = "+ _value);
}
public void Bar()
{
for(int i=0; i<1000; i++)
{
Console.WriteLine("Looping");
if(i==75)
{
_value="BAR";
}
}
Console.WriteLine("DONE Looping");
}
在我的代码片段中,"BAR" 总是会被打印出来吗?
volatile
的理解有误。这是关于CPU缓存的问题。而且我不确定它是否安全。 - SLaksclass Volatile
暴露出来。 - usr