问题:
为什么会出现指令重排?
计算机为提升程序执行性能,可以在硬件层面和程序处理器层面做一些优化,指令重排就是优化方式之一。
指令重排会引起什么问题?
由于程序处理器进行了指令重排,可能会引起程序执行有序性的问题。
如何解决程序执行有序性问题?
针对因程序处理器层面指令重排造成的有序性问题,最简单的方法就是禁止处理器优化和做指令重排,可以通过volatile中使用内存屏障来保证。
硬件层面可遵循as-if-serial语义解决有序性问题,当程序层面是单线程执行的,那么硬件层面优化必须遵循as-if-serial语义,从而解决了硬件层面优化造成的程序执行一致性问题。
java中通过synchronized提供的锁机制,确保了在加锁和解锁过程中的逻辑执行是单线程的,也就满足了符合as-if-serial语义,从而实现了有序性。
来源:oschina
链接:https://my.oschina.net/u/1000241/blog/3190416