有人能解释一下的定义以及顺序一致性和静态一致性之间的区别吗?以最愚蠢的形式:
我读过这样的文章:Example of execution which is sequentially consistent but not quiescently consistent
但我无法理解顺序一致性和静态一致性本身:
发布于 2016-08-11 14:34:03
序列一致性要求这些操作应该按照每个程序中指定的顺序生效。基本上,它在每个单独的进程中强制执行程序顺序,并允许所有进程假设它们在遵守相同的操作顺序。假设我们在一个队列q上有两个进程--排队和脱队列项
P1 -- q.enq(x) -----------------------------
P2 -------------- q.enq(y) ---- q.deq():y --这不是FIFO队列的预期行为。我们希望去队列x,因为P1将x排在P2队列y之前。但是,这种场景在顺序一致性模型中是允许的,因为顺序一致性并不要求所有进程所看到的顺序都是正确的(实时顺序)。至少有一个顺序执行可以解释这些结果,其中一个是:
P2:q.enq(y) P1:q.enq(x) P2:q.deq():y在这个执行过程中,每个进程按照程序顺序执行操作,这意味着每个进程按照在每个进程中指定的顺序执行其操作。
静态一致性要求不重叠的操作以其实时顺序显示生效,但重叠操作可能会被重新排序。因此,在静态一致性模型中不允许使用相同的场景,因为我们期望q.enq(x)在q.enq(y)之前生效,而q.deq()则返回x而不是y。另外,静态的一致性并不一定能保持程序的顺序。如果q.enq(x)和q.enq(y)是并发(重叠)操作,它们可以被重新排序,q.deq():y将保持安静一致。
基本上,有些执行是顺序一致的,但不是平静一致的,反之亦然。
发布于 2014-10-23 01:31:50
首先,你应该明白什么是程序顺序,这就是你期望你的程序按照指令的顺序运行的方式。
但是程序顺序只适用于单个线程程序,如果您有多线程,那么问题就会出现,因为程序顺序可能不存在,甚至不存在,因为有时您无法判断哪个线程的方法调用首先发生。
静态一致性描述了所有线程行为的清晰程序顺序。也就是说,不允许重叠,因为在两个方法调用之间需要一个静止期。
顺序一致性允许重叠,但需要找到一个程序顺序,其中所有的方法调用都可以放在一个位置,但仍然返回正确的值并正确运行。
https://stackoverflow.com/questions/26089729
复制相似问题