内存栅栏是这么一种技术:让一个CPU处理单元中的内存状态对其他的CPU处理单元可见。
在底层内存栅栏是一组指令,一般包括Store Barrier、Load Barrier和Full Barrier。
不同的CPU
架构有不同的实现方式,以X86为例:Store Barrier,强制所有在store屏障指令之前的store指令,都在该store屏障指令执行之前被执行,并把store缓冲区的数据都刷到主存
Load Barrier,强制所有在load屏障指令之后的load指令,都在该load屏障指令执行之后被执行,并且一直等到load缓冲区被该CPU读完才能执行之后的load指令。
Full Barrier,复合了load和store屏蔽指令。
高级语言是怎么应用底层机制的:Java内存模型中volatile变量在写操作之后会插入一个store屏障,在读操作之前会插入一个load屏障。一个类的final字段会在初始化后插入一个store屏障,来确保final字段在
构造函数初始化完成并可被使用时可见。
参考:
http://www.cnb
logs.com/LoveJenny/archive/2011/05/29/2060718.html
http://blog.chinaunix.net/uid-9185047-id-445168.html
http://zh.wikipedia.org/w/index.php?title=%E5%86%85%E5%AD%98%E5%B1%8F%E9%9A%9C&redirect=no
http://ifeve.com/memory-barriers-or-fences/