非阻塞并发的模块化终止验证
1. 引言
程序正确性的理解和证明问题自图灵时代就已被关注。证明程序时,不仅要确保其给出正确答案,还需保证程序能够终止,这对于并发程序而言尤为挑战。当多个线程修改共享资源时,每个线程是否终止往往依赖于其他线程的行为,甚至取决于调度器。
1.1 部分正确性与模块化方法
若仅证明并发程序能产生正确答案,这确立的是部分正确性。近年来,并发程序部分正确性的程序逻辑有诸多发展,这些逻辑强调模块化方法,将模块客户端的验证与其实现解耦,每个操作独立验证,推理局限于线程内部。它们抽象了线程与其环境间的干扰,适用于细粒度并发,特别是非阻塞算法。
1.2 非阻塞算法
非阻塞算法中,一个线程的挂起不会阻碍其他线程的进度。常见的非阻塞属性有等待自由和锁自由。等待自由要求操作无论其他线程干扰如何都能完成;锁自由则要求多个线程操作时至少有一个能取得进展。
1.3 总正确性与 Total - TaDA
若证明程序既产生正确结果又能在有限时间内完成,则确立了总正确性。图灵和弗洛伊德引入了良基关系结合部分正确性论证来证明顺序程序的终止,该技术也适用于并发程序。本文将 TaDA 扩展为 Total - TaDA,用于证明细粒度并发程序的总正确性。Total - TaDA 利用 TaDA 的抽象机制指定保证终止所需的环境约束,保留了 TaDA 的模块化特性。
1.4 TaDA 原子三元组
TaDA 引入了原子三元组的规范形式,支持局部、模块化推理并能表达对并发环境的约束。简单原子三元组形式如下:
超级会员免费看
订阅专栏 解锁全文
1607

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



