Java和C#中的可变语义背后的原因是什么

Java和C#中的可变语义背后的原因是什么,第1张

Java和C#中的可变语义背后的原因是什么

获取/释放语义的作用并不在于其他线程多久才能看到volatile字段本身的新写入的值,而在于易失性 *** 作在不同线程之间建立事前联系的方式。如果线程A读取了一个volatile字段并在另一个线程B中看到了写入该字段的值,那么线程A也将保证在线程B执行该 *** 作之前,线程A会看到线程B写入其他变量(不一定是volatile)的值。易失性写入。这看起来像是缓存刷新,但仅 从读取volatile的线程的角度来看,其他未触及volatile字段的线程对B没有排序保证,并且可能会看到一些较早的非易失性写入,但是如果编译器/ JIT则看不到其他很倾斜

监视器获取/发布的类似特征是它们引起的事前关联-监视器释放之前一个线程的动作可以保证在另一个线程随后获取同一监视器之后可见。Volatiles为您提供与监视器同步相同的顺序保证,但没有阻塞。

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

原文地址: http://outofmemory.cn/zaji/5616101.html

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

发表评论

登录后才能评论

评论列表(0条)

保存