【发布时间】:2011-06-29 19:53:37
【问题描述】:
从 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 中的写入和 v 在线程 2 中的读取确保线程 2 看到在线程 1 中执行的对 i 的写入,因此值为 42被打印出来了。
我的问题是:volatile 在 C# 中是否具有相同的发布/获取语义?
【问题讨论】:
标签: c# java volatile memory-model java-memory-model