jsr 133 第6章

顺序一致性(执行顺序等于代码顺序)

第6章废话太多,又一次重复顺序一致性的缺点,会导致重排序都不能使用。

 

happen-before规则

Initially, A == B == 0

Thread 1          Thread 2

1: B = 1;          3: A = 2

2: r2 = A;        4: r1 = B

 

在上面的例子中,执行的顺序可能是:

1 B = 1

3 A = 2

2 r2 = A   // 可能r2看到的A是0

4 r1 = B  // 可能r1看到的b是0

由于代码3和代码2没有happen-before的关系,r2看到的A可能是0.

同样的,r1看到的B可能也是0,因为代码4和代码1也没有happen-before的关系

 

另一种执行顺序可能是:

2: r2 = A; // r2看到A = 2

4: r1 = B // r1看到B = 1

1: B = 1

3: A = 2

这行为看上去是很荒唐的,一次读操作能看到之前才执行的写操作的结果。但是在happen-before规则中,并没有明确说明这样的结果是不合规则的,因为代码2和代码3之间没有happen-before关系。综上,用happen-before规则作为内存模型是不够的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值