并发算法的模型检查:从 Java 到 C
1. 引言
并发软件的验证是一项具有挑战性的任务。由于线程调度不受应用程序控制,传统测试可能会遗漏特定线程调度下出现的缺陷。为了解决这个问题,软件模型检查应运而生,它会分析所有可能线程调度的结果。
在现有的多线程程序软件模型检查器中,用于 Java 字节码的 Java PathFinder 可能是最灵活的。与 C 程序相比,Java 的虚拟机架构以及缺乏直接的底层内存访问,使其更适合使用虚拟机方法进行软件模型检查。而 C 模型检查器通常采用无状态方法,在分析中更难避免冗余。
因此,先在 Java 中对并发算法进行原型开发,并利用 Java 模型检查器更丰富的功能集,然后再将实现迁移到 C 是有益的。由于 Java 和 C 的线程模型非常相似,这种过渡不会带来很高的开发成本。
2. 并发软件验证的挑战
- 线程调度的不确定性 :并发软件通常使用线程来处理多个执行单元,但线程调度不受应用程序控制,这引入了隐式的不确定性。如果没有适当的并发访问保护,可能会出现竞态条件,即两个并发操作的结果在所有可能的交错执行中不再明确定义。
- 传统测试的局限性 :在软件测试中,一次测试执行只能覆盖所有可能调度中的一个特定实例。为了确保所有调度都不会导致失败,需要进行软件模型检查。
- 模型检查的类型 :
- 无状态模型检查 :回溯后程序会重新启动,不保留已访问程序状态的历史记录。这种方式使模型检查器更
超级会员免费看
订阅专栏 解锁全文

9万+

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



