我从http://www.cs.umd.edu/%7Epugh/java/memoryModel/收到一封邮件,其中说如果对易失性vars的操作包含数据争用,那么保证(“程序是正确同步的当且仅当所有顺序一致的执行都没有数据竞争”。在http://docs.oracle.com/javase/specs/jls/se7/html/jls-17.html#jls-17.4.5中)不能应用。
为了方便起见,我只是把http://www.cs.umd.edu/%7Epugh/java/memoryModel/archive/2477.html的一部分放在这里:
我有一个使用易失性变量的程序,我试图用"A程序是正确同步的当且仅当所有顺序一致的执行都没有数据竞争“来进行推理。保证在JLS3。 JLS3似乎包含了一个故障,使我无法证明我的程序没有数据竞争。具体来说,考虑一个易失性变量V的读R和在R之后以同步顺序出现的写W。JLS3似乎认为R和W是相互冲突的访问方式。此外,在从R到W的边缘之前没有发生这种情况(这是正确的)。因此,JLS3似乎也认为R和W是一个数据竞赛。最后,我似乎不能运用上述的保证。
这就是我的问题:如果对易失性的vars上的操作包含数据竞争,为什么我们不能应用JLS中包含的保证?
发布于 2012-08-24 10:29:53
顺序一致的执行包含对易失性的写入之前的易失性读取。
=>
该执行包含一个数据竞赛。
=>
程序没有“正确同步”。
=>
JLS不提供适用于正确同步程序的保证。
https://stackoverflow.com/questions/12107582
复制相似问题