我不明白这些。假设我在内存地址x处有一个值10。
如果我们有
thread1:
Read(x)
x+=5
Write(x)然后:
thread2:
Read(x)
x+=2
Write(x)我不明白什么是有效的顺序或严格的一致性。
比如,在这里,这是一个有效的严格一致的操作结果吗?
T1: R(x), found 10 W(x), x is now 15
T2 R(x),found 10 W(x), x is now 12那看起来太没用了。X值不对..。不是添加剂。也就是说,每个处理器执行的访问都是按顺序进行的,每个人都看到了相同的顺序。这是严格一致性的标准,对吧?结果被压坏并不重要。
为了连续的一致性..。我不明白它和严格的区别。
发布于 2014-12-04 23:23:17
部分回答你的问题:
顺序一致性,只是要求内存位置按照发出的顺序查看操作。从主线程(时钟)的角度来看,发出这些操作的方式可能并不可取。
但是,它们仍然是顺序一致的。我自己的解释是,重新排序在内存位置上的操作发布后,将违反一致性要求。就好像在发行时已经买到了一张全球票,执行引擎也遵守了订票的要求。
“问题”,如果我们可以这样说的话,就是指令问题本身-- T1和T2可以随意按任何顺序发布它们。如果应用程序对这种一致性很满意,那么它应该很高兴地使用它。
假设情况:让我们希望一些内存位置被多个线程更新,在完成所有线程之后,读取器必须读取最后一个书面值--您只需要最后一个就能按它们发出的顺序获胜。当然,这是一个狭窄的情况,但在某些情况下是可取的。
https://stackoverflow.com/questions/27305830
复制相似问题