设为首页 加入收藏

TOP

面试必问的 volatile,你了解多少?(三)
2018-01-30 12:42:06 】 浏览:362
Tags:面试 volatile 了解 多少
k后面指令时,会设置处理器的LOCK#信号(这个信号会锁定总线,阻止其它CPU通过总线访问内存,直到这些指令执行结束),这条指令的执行变成原子操作,之前的读写请求都不能越过lock指令进行重排,相当于一个内存屏障。

还有一个:第二次使用foo变量时,从内存中重新加载,保证可以拿到foo变量的最新值,这是由如下指令实现

__asm__ volatile ( : : : "cc", "memory");

同样是编译器屏障,通知编译器重新生成加载指令(不可以从缓存寄存器中取)。

读取volatile变量

同样在bytecodeInterpreter.cpp文件中,找到getstatic字节码指令的解释器实现。

通过obj->obj_field_acquire(field_offset)获取变量值

最终通过OrderAccess::load_acquire实现

inline jint OrderAccess::load_acquire(volatile jint* p) { return *p; }

底层基于C++的volatile实现,因为volatile自带了编译器屏障的功能,总能拿到内存中的最新值。

首页 上一页 1 2 3 下一页 尾页 3/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇通向架构师的道路(第二天)之 ap.. 下一篇通向架构师的道路(第四天)之 To..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目