|
|
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
如果您想对共享内存一致性模型有更深入的了解,我将向您介绍以下教程。 |
|
|
Nima Adib · 使用shm\u open在C结构中共享字符指针 8 年前 |
|
|
Emichael · 包括常量而不导入头文件 8 年前 |
|
|
munky · numa分配的内存由两个分叉进程共享? 8 年前 |
|
|
Wonter · shmat()权限被拒绝,即使我有读取权限 8 年前 |
|
|
Andrej · shmctl在C中抛出“无法分配内存” 9 年前 |
|
|
ashishv · 并行计算中处理器和进程的区别? 9 年前 |
|
|
Skylion · 共享阵列能否在Julia中安全地处理并发写入? 10 年前 |