synchronized如何高中有序性的

不想你离开。 提交于 2020-03-09 12:15:58

问题:

为什么会出现指令重排?

计算机为提升程序执行性能,可以在硬件层面和程序处理器层面做一些优化,指令重排就是优化方式之一。

指令重排会引起什么问题?

由于程序处理器进行了指令重排,可能会引起程序执行有序性的问题。

如何解决程序执行有序性问题?

针对因程序处理器层面指令重排造成的有序性问题,最简单的方法就是禁止处理器优化和做指令重排,可以通过volatile中使用内存屏障来保证。

硬件层面可遵循as-if-serial语义解决有序性问题,当程序层面是单线程执行的,那么硬件层面优化必须遵循as-if-serial语义,从而解决了硬件层面优化造成的程序执行一致性问题。

java中通过synchronized提供的锁机制,确保了在加锁和解锁过程中的逻辑执行是单线程的,也就满足了符合as-if-serial语义,从而实现了有序性。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!