从 Java 5 开始,该volatile
关键字具有释放/获取语义以使副作用对其他线程可见(包括对非易失性变量的赋值!)。以这两个变量为例:
int i;
volatile int v;
请注意,这i
是一个常规的非易失性变量。想象一下线程 1 执行以下语句:
i = 42;
v = 0;
在稍后的某个时间点,线程 2 执行以下语句:
int some_local_variable = v;
print(i);
根据 Java 内存模型,v
线程 1 中的写入和线程 2 中的读取v
确保线程 2 看到i
线程 1 中执行的写入,因此打印值 42。
我的问题是:volatile
在 C# 中是否具有相同的发布/获取语义?