c# – 具有释放获取语义的volatile

c# – 具有释放获取语义的volatile,第1张

概述从 Java 5开始,volatile关键字具有释放/获取语义,以使副作用对其他线程可见(包括对非易失性变量的赋值!).拿这两个变量,例如: int i;volatile int v; 请注意,我是一个常规的非易失性变量.想象一下线程1执行以下语句: i = 42;v = 0; 在稍后的某个时间点,线程2执行以下语句: int some_local_variable = v;print(i) 从 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规范.

总结

以上是内存溢出为你收集整理的c# – 具有释放/获取语义的volatile全部内容,希望文章能够帮你解决c# – 具有释放/获取语义的volatile所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1240261.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存