c# – 具有释放/获取语义的volatile
发布时间:2020-12-15 18:15:02 所属栏目:百科 来源:网络整理
导读:从 Java 5开始,volatile关键字具有释放/获取语义,以使副作用对其他线程可见(包括对非易失性变量的赋值!).拿这两个变量,例如: int i;volatile int v; 请注意,我是一个常规的非易失性变量.想象一下线程1执行以下语句: i = 42;v = 0; 在稍后的某个时间点,线
从
Java 5开始,volatile关键字具有释放/获取语义,以使副作用对其他线程可见(包括对非易失性变量的赋值!).拿这两个变量,例如:
int i; volatile int v; 请注意,我是一个常规的非易失性变量.想象一下线程1执行以下语句: i = 42; v = 0; 在稍后的某个时间点,线程2执行以下语句: int some_local_variable = v; print(i); 根据Java内存模型,在线程1中写入v后跟线程2中的v的读取确保线程2看到在线程1中执行的写入i,因此打印值42. 我的问题是:volatile在C#中是否具有相同的发布/获取语义? 解决方法
C#中“volatile”的语义在规范的3.10和10.4.3节中定义.我鼓励你在规范中查找它,而不是在这里重现它们,然后决定使用“volatile”过于复杂和危险,然后回到使用锁.这就是我一直以来所做的.
见3.10 Execution Order和10.4.3 Volatile Fields规范. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |