抽象线程在多线程程序分析中的应用与验证
在多线程程序的分析与验证中,抽象线程是一种强大的工具。它可以帮助我们简化复杂的多线程程序,提高验证效率。本文将详细介绍抽象线程的相关概念、如何检查线程的抽象关系以及通过实际实验展示其在多线程程序分析中的效果。
1. 线程抽象概述
在程序A和A#中,虽然A中没有断言,但在状态X1的A#中引入了断言。这个断言对于一致性检查至关重要,因为若没有它,线程A对从全局变量g读取的值没有假设,可能会给g赋负值,而这在A#中并未建模。
尽管A是一个小程序,但A#比A更简单。虽然A#有更多断言,但通过消除变量x,其局部状态变得有限。引入的断言是能够消除变量x的关键原因。例如,若将A中的x := 1替换为x := -1得到˜A,˜A可能会将g更新为负值,而A#只能将g更新为正值,所以A#不是˜A的抽象。
2. 一致性检查器
为了检查一个线程是否被另一个线程抽象,我们引入一致性检查器。
2.1 顺序程序的定义
一个顺序程序是一个四元组 (Z, ⇝, Start, Error),其中:
- Z是状态集合;
- ⇝⊆Z²是转移关系;
- Start ⊆Z是初始状态集合;
- Error ⊆Z是错误状态集合。
顺序程序的执行是一个有限长度k的非空状态序列z,满足z(0) ∈ Start且对于所有0 ≤ j且j + 1 < k,有z(j) ⇝ z(j + 1)。若执行中的任何状态在Error中,则该执行失败。若顺序程序没有失败的执行,则它是正确的。
超级会员免费看
订阅专栏 解锁全文

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



