首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >c#和java中的易失性有什么不同?

c#和java中的易失性有什么不同?
EN

Stack Overflow用户
提问于 2014-02-25 22:19:57
回答 1查看 188关注 0票数 0

在一些.net文档中,我看到了编译器如何处理易失性:

  • *“从易失性中读取或使用Thread.VolatileRead方法在逻辑上是获取围栏”
  • “写入易失性或使用Thread.VolatileWrite方法在逻辑上是一个释放围栏”*

这些栅栏适用于编译器和架构级别。

当然,VC++的主要区别是篱笆只能在更高的水平上使用。

所以我的问题是,Java中易失性的内存重排预防语义是什么?

改划:

栅栏=栅栏

参考文献:

Joe (Windows上的并发编程)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-25 22:24:38

在Java中,javac编译器几乎什么都不做。它不对语句进行重新排序,也几乎没有优化。

另一方面,JIT可以进行相当多的优化和重新排序。

volatile的重要特征有:

  • 读/写访问无法优化
  • 任何发生在易失性写入之前的写入都必须在写入之前进行。
  • 任何在易失性读取后发生的读取,都必须在读取之后进行。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22027496

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档