as-if-serial语义保证单线程内程序的执行结果不被改变,happens-before关系保证正确同步的多线程程序的执行结果不被改变。 as-if-serial语义给编写单线程程序的程序员创造了一个幻境:单线程程序是按程序的顺序来执行的。happens-before关系给编写正确同步的多线程程序的程序员创造了一个幻境:正确同步的多线程...
A happens-before B,定义1要求A执行结果对B可见,并且A操作的执行顺序在B操作之前,但与此同时利用定义中的第二条,A,B操作彼此不存在数据依赖性,两个操作的执行顺序对最终结果都不会产生影响,在不改变最终结果的前提下,允许A,B两个操作重排序,即happens-before关系并不代表了最终的执行顺序。 as-if-serial与hap...
1、程序顺序规则:一个线程中的每个操作,happens-before于线程中的任意后续操作。 2、监视器锁规则:一个锁的解锁,happens-before于随后对这个锁的加锁。 3、volatile变量规则:对一个volatile域的写,happens-before于任意后续对这个volatile域的读。 4、传递性:如果A happens-before B,且Bhappens-before C,那么Ahap...
因此,happens-before关系本质上和as-if-serial语义是一回事。 as-if-serial语义 as-if-serial语义的意思是:不管怎么重排序(编译器和处理器为了提高并行度),(单线程)程序的执行结果不能被改变。编译器、runtime和处理器都必须遵守as-if-serial语义。 为了遵守as-if-serial语义,编译器和处理器不会对存在数据依赖关...
happens-before规则如下: 程序顺序规则:对于单个线程中的每个操作,前继操作happens-before于该线程中的任意后续操作。 监视器锁规则:对一个锁的解锁,happens-before于随后对这个锁的加锁。 volatile变量规则:对一个volatile域的写,happens-before于任意后续对这个volatile域的读。