44、线程模块化抽象解释中的不同读取分析方法

线程模块化抽象解释中的不同读取分析方法

在并发编程的分析中,为了确保程序的正确性和高效性,需要对线程间共享的全局变量的读写操作进行精确分析。下面将介绍几种不同的读取分析方法,包括基于保护的读取、以锁为中心的读取和以写为中心的读取,并分析它们的特点和正确性。

1. 基于保护的读取(Protection-Based Reading)

基于保护的读取分析方法相对于跟踪语义是可靠的。在分析过程中,不会从局部状态的变量赋值中移除任何值。为了保持局部状态表示的简洁性,还可以额外跟踪每个程序点和当前持有的锁集下,可能已被写入但尚未发布的全局变量集合 $W$。当全局变量 $g$ 不在 $P \cup W$ 中时,可以安全地从 $\sigma$ 中移除 $g$ 的本地副本。

该分析需要预先给定映射 $M: G \to 2^M$,不过也可以动态推断 $M$。将 $M[g]$ 视为约束系统的独立未知量,其取值在完全格 $2^M$ 中,并初始化为所有互斥锁的集合 $M$。对全局变量 $g$ 进行写入操作时,右侧函数会将当前锁集作为对 $M[g]$ 的贡献。

然而,控制流边的解锁操作在未知量 $M[g]$ 上不再单调。为了提高效率,还可以放弃根据持有的锁集进行状态分割,但会损失一定的精度。具体做法是,额外跟踪每个程序点必须持有的互斥锁集合 $\overline{S}$,并在所有右侧函数中用 $\overline{S}$ 替换 $S$。

2. 以锁为中心的读取(Lock-Centered Reading)

以锁为中心的读取方法是对 Miné 分析的改进,去除了线程 ID 和实时系统特定的特性,并通过副作用约束系统进行重新表述。该方法为每个程序点

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值