3
在JLS 17.4.4,它说如何理解总订单的同步订单?
每次执行具有同步顺序。同步顺序是执行的所有同步操作的总顺序。
我知道什么是总订单。而且我知道同步操作需要订购。但是,这里让我困惑的是为什么它是ALL的同步操作的总订单。例如,在监视器m上的解锁动作发生在m的所有后续锁定动作之前。但是,如果同时显示器上有锁定动作n,是否需要在显示器上的解锁动作后订购m?如果不是,那么为什么所有的同步操作都有一个总的顺序?谢谢。
首先,我真的很感谢你的回应,我认为你的观点已经启发了我,我正在考虑的是:从17.4.3“如果所有动作都是以全部顺序(执行顺序)发生,这与程序的顺序是一致的“,而且JMM语义上是顺序一致的,这是通过同步动作来同步竞争数据来保证的,所以同步动作总有一个顺序来确保JMM的顺序一致性。订购这里是关于同步操作的可见性。 –
总结一下。虽然理论上认为JMM的工作方式很有用,但实际上我真的不能想到这样一个细节会有用的地方;线程间行为以这种方式表现的事实可能不是JMM的副作用,但更可能是现今大多数CPU缓存工作的方式(如果我错了,请纠正我)。无论哪种方式,如果您觉得这些细节对您的职业或项目或者其他方面有用,我会很好奇你分享:) – xTrollxDudex