通过内存语义和模型,我们通过指令重新排序和绕过屏障的缓存刷新/更新来理解它。在Java的Varhandle类中,dey引入了许多内存语义,但很少解释它到底是做什么的?我有以下问题和澄清所需的->
a)普通的set和get和普通的内存访问一样,没有内存排序限制,也没有可见性保证?b)不透明内存语义->它到底是做什么的?这是一个简单的内存读写主存(不涉及缓存),没有任何内存排序限制?文档显示,->保证了对单个线程的相同变量的有序访问。c) aquire/release和易失性之间的区别??
谢谢
发布于 2019-07-05 18:28:30
这是我从下面的docs -> http://gee.cs.oswego.edu/dl/html/j9mm.html Acquire/Release versus Sequentially Consistent memory order中得到的
a)纯模式->仅原语和引用get和set是原子的,允许所有排序,没有缓存刷新。b)不透明的->保证程序顺序线程间只有一个变量可见。没有保证/约束其他变量的可见性线程间c)获取/释放->相同变量的全订单保证加发生在保证之前。在版本d)易失性->对所有易失性变量进行完全有序的内存访问时,是否在获取和缓存刷新时缓存无效。完全按照程序顺序进行。
https://stackoverflow.com/questions/56787057
复制相似问题