当前位置: 首页 > 知识库问答 >
问题:

易变变量

上官恩
2023-03-14

我最近与一家软件公司进行了一次面试,他问了我以下问题:

你能给我描述一下在变量前面添加volatile有什么作用吗?你能给我解释一下为什么这很重要吗?

我的大部分编程知识都来自C语言,但我的工作岗位是C#(我想如果需要的话,我可以特别为这个问题添加一些信息)

共有1个答案

韩靖琪
2023-03-14

老实说,面试官提出的问题有点迷雾。

这真的取决于他/她所说的“OS”是什么意思。他们是在谈论“前期操作系统”,纯粹的软件方面的东西,还是他们可能把“操作系统”误解为硬件-软件关系,即RTE和MMM(我在自己的一些个人访谈中看到了假设和比较)。我想应该注意的是,这两者是相当明显的不同的!如果他/她说的是前者,那么NO volatile不会“通知”操作系统。如果他们说的是后者,那么是(这是一个松散的是)。在这一点上,您进入了语言之间差异的领域。正如Cody Gray提到的,C#是一种托管语言,因此OS的后一种定义确实会“得到”变量和要采取的预防措施的通知。

而且,在操作系统的任何情况或定义中,编译器确实专门管理和处理volatile字段,而不考虑语言。否则,为什么一开始就有关键词呢?

在我个人看来,无论这有什么价值,我认为你的回答是正确的,尽管,从评论判断,可能会变得复杂和忙乱的本质。

 类似资料:
  • 以下是经典的实践中的一致性: 当线程A写入一个易失性变量,随后线程B读取相同的变量时,A在写入易失性变量之前可见的所有变量的值在读取易失性变量后变得对B可见。 我不确定我真的能理解这句话。例如,在这种情况下,所有变量的含义是什么?这是否意味着使用对使用非volatile变量也有副作用<在我看来,这句话有一些我无法理解的微妙含义<有什么帮助吗?

  • 问题内容: 因此,我正在阅读《 实践 中的 Java并发性》 这本书,而我只能停留在这一解释上,没有一个例子,我似乎无法理解。这是报价: 当线程将数据写入易失性变量,然后线程 读取同一变量时,在写入易失性变量之前可见的所有变量的值 将在读取易失性变量后变为可见。 有人可以给我一个反例的原因,为什么“在写入易失性变量之前可见的所有变量的值在读取易失性变量之后就变得可见”? 我很困惑,为什么在读取易失

  • 问题内容: 我有两个线程: 线程数:1 线程数:2 在这里,a和b被声明为volatile。我不了解如何在a = 1之间创建“先发生”边;y = a; 在x = b之间; 并且b = 1; 我知道通过使用volatile变量可以防止从线程缓存中读取过时的值。但是,可变变量如何才能确保在订购前发生。 具体来说,我不明白这一点: 后续每次读取同一字段之前,都会对易失字段进行写操作。 e头有效吗? 问题

  • 问题内容: 当线程读取一个volatile变量时,它不仅看到volatile的最新更改,还看到导致该更改的代码的副作用 在http://docs.oracle.com/javase/tutorial/essential/concurrency/atomic.html中提到了这一点 有人可以提供一个例子吗? 这首先给我的印象是,读取一个volatile变量的线程将与writer线程同步,并等待写入完

  • 问题内容: 我想说明 先发生的 关系如何与 volatile 变量一起使用。让我们有以下变量: 和线程A: 和线程B: 根据Java内存模型(JMM),以下语句正确吗? 如果没有,正确的解释是什么? 总是在 发生之前 __仅在JMM中实际发生时才 发生- 在JMM中 __ 如果实际上发生在时间之前,则发生在JMM中-before -before (并且将可预测地分配) 否则,和之间的顺序不确定,并

  • 本文向大家介绍易语言变量多用方法,包括了易语言变量多用方法的使用技巧和注意事项,需要的朋友参考一下 一般情况下一个变量只能存储一个变量如图下: 用了3个变量,但是如果你用多了,会导致源码量变多,怎么才能少用呢?在看下图: 这里只用了1个变量,但是效果和用3个变量是一样的,如果你想要多少变量,就在数组里面填写多少。使用变量的时候在变量后面加上相应的编号,如:ABC[1]..... 以上相关的变量多用