1 个回答

在CPU层面,volatile关键字会生成一个汇编指令,这个就相当于实现了一种内存屏障,保障该变量值在多线程下的的可见性。
具体的操作是,当线程操作volatile变量时,会写入一个屏障;
屏障的类型有LoadLoadLoadStoreStoreLoadStoreStore

Load表示读,Store表示写。两两组合

在假设线程A,B按序操作volatile变量,
LoadLoad屏障的意思就是:在线程B在读取操作数据前,保证线程A读取操作完毕。
StoreLoad屏障的意思就是:在线程B在读取操作数据前,保证线程A写入操作完毕并对所有线程可见。

至于Intel CPU如何实现机械同感,这个问题比较复杂,内容包含了CPU架构、指令集、协议等多方面了。目前没有太过深入的了解。
不过通过不知名老哥的Java并发杂谈(一):volatile的底层原理,从字节码到CPU文章的了解,主要采用了MESI缓存一致性协议来保证缓存数据的一致性,同时也会使用锁定总线和缓存锁定等机制来实现同步的

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏