【发布时间】:2012-08-17 13:26:06
【问题描述】:
JLS 有两个结论:
- C1:如果程序没有数据争用,则程序的所有执行将显示为顺序一致:
data-race-free => sequentially consistent - C2:如果程序正确同步,则程序的所有执行将显示为顺序一致:
correctly synchronized => sequentially consistent
如果C1的反义词为真,那么我们可以得出结论:
- C3:如果程序正确同步,则不会出现数据争用:
correctly synchronized => data-race-free
但很遗憾,JLS 中并没有这样的说法,所以我得出第四个结论:
- C4:程序可以正确同步并存在数据竞争。
但我对这种方法并不满意,我想证明这个结论是正确的(或错误的),即使是以非正式的方式或样本的方式。
首先,我认为显示包含数据竞争的多线程程序的顺序一致执行的代码段有助于理解和解决这个问题。
经过认真考虑,我仍然找不到合适的样品。那么请给我这样的代码段好吗?
【问题讨论】:
-
就我个人而言,我会说 C3 是对 C2 的改写。我认为对于这种情况,代码示例可能没有太大帮助。您可以查看正确同步的代码示例,以证明同步代码将消除任何竞争条件。但是要同步的内容和原因的示例将特定于该示例。我建议阅读更多关于一般同步和多线程的内容。然后,您可以将这些概念应用到 Java 中。
-
你可能会觉得this paper很有趣。
-
@newman 我已经改写了您的问题 - 如果您不喜欢我的编辑,请随时回滚。
标签: java multithreading memory-model