并发程序的线程模块化抽象解释与静态分析
在并发程序的分析领域,线程模块化抽象解释和静态分析是重要的研究方向。本文将详细介绍相关的约束系统构建、不同操作的语义定义以及几种静态分析方法。
1. 约束系统基础
首先给出了一些基本的约束条件:
[u0] ⊇ fun
→(∅, init)
[u′] ⊇ 〈u, A〉,
((u, A, u′) ∈ E)
其中右侧 〈u, A〉 的具体形式取决于对应边 e = (u, A, u′) 的动作 A。接下来将详细阐述不同动作对应的约束是如何构建的。
2. 不同操作的语义
2.1 线程创建
假设在局部变量集合 X 中有一个专用变量 self 保存当前线程的线程 ID。动作集合 A 提供了 x = create(u1); 操作,其中 u1 是线程执行开始的程序点,x 是用于接收新创建线程 ID 的局部变量。 create 操作的效果被建模为对程序点 u1 的副作用,对于程序点 u 有:
〈u, x = create(u1)〉 η = let T = 〈e〉(η [u]) in
({[u1] ↦ new u1 (η [u])}, T)
2.2 加锁和解锁
为了简化,只考虑一个固定的有限互斥锁集合 M。动作集合 A 提供 lock(a) 和
超级会员免费看
订阅专栏 解锁全文
170万+

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



