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