并发对象一致性:从顺序一致性到线性一致性
1. 并发对象一致性基础概念
在并发编程中,一致性是一个关键概念,它确保并发操作的结果符合预期。首先,我们来了解一些基础概念。
1.1 静止一致性(Quiescent Consistency)
静止一致性的一个典型应用是索引分配机制。一个处于静止一致状态的计数器,其待处理的方法调用必须返回一个索引,使得所有索引共同满足顺序计数器的规范,即没有重复或遗漏的数字。它就像程序中的“循环计数器”,在不关心索引发布顺序的程序中非常有用。
静止一致性对并发的限制极小。在任何并发执行中,对于任何待处理的全方法(total method)调用,都存在一个静止一致的响应。全方法是指在对象的每个状态下都有定义的方法,而部分方法(partial method)则只在对象的某些状态下有定义。例如,在无界顺序先进先出(FIFO)队列中,入队操作 enq() 是全方法,因为它在队列的任何状态下都有定义;而出队操作 deq() 是部分方法,因为它只在队列非空时才有定义。
静止一致性是一种非阻塞的正确性条件,并且具有组合性。这意味着可以将多个独立实现的静止一致对象组合成一个更复杂的静止一致系统。
1.2 顺序一致性(Sequential Consistency)
顺序一致性要求方法调用看起来像是按照程序顺序依次执行的。单个线程发出方法调用的顺序称为其程序顺序,不同线程的方法调用之间不存在程序顺序关系。
例如,在图 3.5 中,一个线程先向共享寄存器 r 写入 7,再写入 -3
超级会员免费看
订阅专栏 解锁全文
1076

被折叠的 条评论
为什么被折叠?



