1 前言
2 Synchronization
3 Wait Sets and Notification
4 Sleep and Yield
5 Memory Model
5.1 Shared Variables
5.2 Actions
5.3 Programs and Program Order
5.4 Synchronization Order
5.5 Happens-before Order
5.6 Executions
理论上,执行是一个过程,在该过程中包括很多动作以及相关的执行对象,假设存在一个执行E,则E的构成以元组的形式表示是:< P, A, po, so, W, V, sw, hb >,则其描述如下所示:
|
在一个E对应的元组中,sw与hb中包括的元素是由E对应的元组中的其他组件以及合法的执行语法规则唯一地确定。如果一个E对应的动作集合符合happens-before关系的一致性,则E符合happens-before关系的一致性。
5.7 Well-Formed Executions
假设存在一个执行E = < P, A, po, so, W, V,sw, hb >,则E符合合法的执行语法规则需要满足以下的条件:
1 每一个读动作都可见到在执行过程中对相同变量的写动作 所有对volatile类型变量的读写都是volatile类型的动作(同步动作)。对于A中的所有读动作r,则A中存在写动作W(r),使得W(r).v=r.v,该等式表示对于相同变量,读入动作可见到写入动作,读写涉及到的变量的值始终保持一致。变量r.v是volatile类型当且仅当r是一个volatile类型的读动作,变量w.v是volatile类型当且仅当w是一个volatile类型的写动作。 2 happens-before顺序是部分有序 happens-before顺序是由同步关系边缘与程序顺序的传递闭包给定,该顺序必须是合法的部分有序,该合法性必须满足自反性、传递性、反对称性。(偏序,集合理论) 3 E遵守线程内部一致性 线程t执行的A中的动作与由线程t的程序顺序(每个线程相互隔离与独立,线程内部保持一致)生成的动作相同,对于每个w动作,w写入V(w)值,给定每个r动作,使得r可见V(W(r))值,也就是,与W相关的r、w,r都可见V(w)的写入值。读可见的值是由内存模型确定的,对于给定的程序顺序,必须反映出根据P的线程内部语义而执行动作的程序顺序。 4 E遵守happens-before一致性 对于A中所有读动作r,不包括以下两个场景:
5 E遵守同步顺序一致性 对于A中所有volatile类型的读动作r,不包括以下两个场景:
|
(未完待续)