zl程序教程

您现在的位置是:首页 >  Java

当前栏目

Java线程与锁-5

2023-04-18 14:22:18 时间

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

5.7 Well-Formed Executions

5.8Executions and Causality Requirements

为了验证JVM内存模型对执行集E = < P, A, po, so, W, V, sw, hb >实现约束的合法性,在E被执行的过程中,分批次逐步提交A中的动作,如果A的所有动作都能完成提交,则表示E符合Java编程语言的内存模型的因果关系的合法推断,其推断的逻辑关系符合数学函数与集合理论上的演绎与归纳,当且仅当:

  • 动作集序列C0,C1…, 其中,C0是空集,CiCi+1的子集,A= C0,C1…的并集,如果A是有限集,则C0,C1…是有限的,Cn=A,如果A是无限集,则C0,C1…是无限的,A= C0,C1…的并集

  • 执行序列E1,…是合法的,其中,Ei = < P, Ai,  poi, soi, Wi, Vi, swi,  hbi >

给定动作集序列C0,C1…以及执行集序列E1,…,在Ci中的每一个动作必须是执行集Ei中的动作,在Ci中的所有动作必须共享Ei以及E中相同的与之对应的动作的hb顺序关系以及so关系,其形式定义如下所示:

1 CiAi的子集

2 hbi|Ci =  hb|Ci,表示在动作集Ci的作用域内,hbi的顺序关系集等于hb的顺序关系集

3 soi|Ci = so|Ci,表示在动作集Ci的作用域内,soi的顺序关系集等于so的顺序关系集

在动作集Ci中的全部写动作的值必须与Ei以及E中全部写动作的值相同,在动作集Ci中的全部读动作需要可见到Ei以及E中全部写动作的值,其形式定义如下所示:

4 Vi|Ci = V|Ci,表示在动作集Ci的作用域内,Vi函数的实现等同于V函数的实现

5 Wi|Ci-1 = W|Ci-1,表示在动作集Ci的作用域内,Wi函数的实现等同于W函数的实现

Ei中而不在Ci-1中的全部读必须可见到发生在其之前的全部写,每一个在Ci-Ci-1中的读r必须可见到Ci-1作用域在Ei以及E中的全部写,但是可能见到在Ei以及E中不同的写,其形式定义如下所示:

Ai – Ci-1中的任何读r,存在hbi(Wi(r), r),表示r可见到发生在r之前的与r有关的所有写

Ci – Ci-1中的任何读r,存在作用域Ci-1 的Wi(r) 以及作用域Ci-1W(r) ,也就是,Wi(r)W(r)是在相同作用域Ci-1中两个不同的写

 为Ei给定一个充分sw边集,假如存在一个释放获取的sw边集元素对发生在当前正在提交的动作之前,则该sw边集元素对必须在所有Ej中,其中j大于或者等于i,其形式定义如下所示:

假设sswiswi边集,该边集也满足hbi顺序关系集的传递性,但是不满足po,则sswi被称之为Ei的充分sw边,假如sswi(x, y)以及hbi(y, z)以及z在Ci中成立,则swj(x, y)成立,其中,j大于或者等于i,由此可知,假如y已被提交,则发生在y之前的所有外部动作也已被提交

9  假设y在Ci中,x是外部动作并且hbi(x, y),则x在Ci

(未完待续)