Java线程与锁-4

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 >,则其描述如下所示:

  • P 一段程序

  • A 一个动作集合

  • po 程序顺序(program order),即每个线程t执行A中所有动作的总顺序

  • so 同步顺序(synchronization  order),A中所有同步动作的总顺序

  • W 一个写可见的函数,对于A中每个读动作r,给定W(r),该函数表示写动作对E中的r可见,也就是,与W相关的所有r动作,W的写入对r都可见

  • V 一个写入值的函数,对于A中每个写动作w,给定V(w),该函数表示E中的w写入的值,也就是,w动作使用函数V写入的值

  • sw 同步关系(synchronizes-with),表示同步动作中的部分有序(偏序,集合理论)

  • hb happens-before关系,表示动作中的部分有序(偏序,集合理论)

在一个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,不包括以下两个场景:

  • hb(r,W(r)),表示r发生在W(r)之前

  • A中存在写动作w,使得w.v=r.v并且hb(W(r),w)与hb(w,r),表示当r发生在W(r)之后,存在r与W(r)之间发生的写动作w

 5 E遵守同步顺序一致性

对于A中所有volatile类型的读动作r,不包括以下两个场景:

  • so(r,W(r)),表示在同步顺序中,r发生在W(r)之前

  • A中存在写动作w,使得w.v=r.v并且so(W(r),w)与so(w,r),表示在同步顺序中,当r发生在W(r)之后,存在r与W(r)之间发生的写动作w

(未完待续)

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wangys2006

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值