由于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看到在线程1中执行的写入i
,因此打印值42。
我的问题是:是否volatile
在C#中具有相同的发布/获取语义?
不完全;见http://blogs.msdn.com/b/ericlippert/archive/2011/06/16/atomicity-volatility-and-immutability-are-different-part-three.aspx –