1
7
你可以读到 Read After Write (RAW), Write after Write(WAW) and Write After Read (WAR) hazards 以了解有关此主题的更多信息。这些危险是指流水线处理,但它实际上是同一个问题,发生与多线程。这基本上意味着两个不同的线程正在更新内存中的同一个位置,如果您以某种顺序依赖这些更新,那么您可能会惊讶地发现,您无法保证更新发生的顺序。 例如,如果有两个语句:
在一个线程中,你没有问题,因为r的值总是一致的。然而,在多个线程中,可能或其中一个语句首先出现,并且r的值很难预测。 |
2
4
基本上,在没有任何同步线程的情况下,可以看到 简单的 字段。举个例子:
避免内存一致性错误的最简单方法是声明
这种强制线程重新检查内存的行为称为
记忆障碍
. 另一个例子
记忆障碍
是一个
|
3
3
嗯,他们基本上是在谈论“可见性问题”和“重新排序问题”(至少在Java IMO中这个术语更常见)。我认为这一联系: http://www.cs.umd.edu/~pugh/java/memoryModel/jsr-133-faq.html#volatile 解释教程的内容,使用更常用的术语(可能sun试图使用“更简单”的词汇表或其他东西)。 |
4
1
我在搜索这个问题时找到了一个很好的例子。如下所示:
Accesses to main memory might not occur in the same order that the CPU initiated them, particularly for writes (which often go through hardware write buffers so the CPU needn't wait for them). If CPU 1 writes the Answer to location A and then writes the AnswerIsReady flag to B, CPU 2 may see the change to B before it sees the change to A, and thus get the WrongAnswer. Making either or both writes atomic doesn't help; what's needed is something called a "memory barrier." 通过 http://www.velocityreviews.com/forums/t390825-memory-consistency-errors.html |
5
0
如果您想对共享内存一致性模型有更深入的了解,我将向您介绍以下教程。 |