Bob*_*r02 14 java cpu multithreading volatile java-memory-model
我试图理解java volatile的内在函数及其语义,以及它对底层架构及其指令的转换.如果我们考虑以下博客和资源
为volatile生成的fences,在fence上读取/写入volatile和Stack overflow问题时会生成什么
这是我收集的内容:
我正在努力理解的是:Java不会在x86上发出LFENCE,即读取volatile不会导致LFENCE ....我知道x86的内存排序会阻止lods/stored的负载重写,所以第二个要点是照顾.但是,我假设为了使该状态可以被该线程看到,应该发出LFENCE指令以保证在执行栅栏后的下一条指令之前所有LOAD缓冲区都被耗尽(根据英特尔手册).我知道x86上有cahce coherence协议,但是volatile读取仍然会消耗缓冲区中的任何LOAD,不是吗?
在x86上,缓冲区固定到缓存行.如果缓存行丢失,则不使用缓冲区中的值.所以没有必要围栏或排出缓冲区; 它们包含的值必须是最新的,因为在没有首先使高速缓存行无效的情况下,另一个核心无法修改数据.
归档时间: |
|
查看次数: |
317 次 |
最近记录: |