基于成对组合的大型并发程序合成
在并发编程领域,合成大型并发程序是一项具有挑战性的任务。本文将介绍一种通过成对组合来合成大型并发程序的方法,包括相关定义、合成方法的正确性、死锁避免、活性保证等方面,并通过读者 - 写者问题和两阶段提交协议两个示例进行说明。
1. 成对合成定义
首先,我们定义了 I 进程 $P_{I}^{i}$($i \in {i_1, \ldots, i_K}$)是如何从成对进程 $P_{j}^{i}$($j \in I(i)$)派生而来的。
$P_{I}^{i}$ 包含一条从 $s_i$ 到 $t_i$ 的弧,其标签为 $\otimes_{j \in I(i)} \oplus_{\ell \in [1:n_j]} B_{j}^{i,\ell} \to A_{j}^{i,\ell}$,当且仅当对于所有 $j \in I(i)$,$P_{j}^{i}$ 包含一条从 $s_i$ 到 $t_i$ 的弧,其标签为 $\oplus_{\ell \in [1:n_j]} B_{j}^{i,\ell} \to A_{j}^{i,\ell}$。
I 程序的初始状态集 $S_{0}^{I}$ 是从成对程序的初始状态集 $S_{0}^{ij}$($(i, j) \in I$)派生而来的,具体为 $S_{0}^{I} = {s | \forall (i, j) \in I : s^{\uparrow ij} \in S_{0}^{ij}}$。
这里,$\otimes$ 是受保护命令的“合取”。例如,$B_1 \to A_1 \otimes B_2 \to A_2$ 的操作语义是,如果两个保护条件 $B_1$ 和 $B_2$ 都评估为真,则主体
超级会员免费看
订阅专栏 解锁全文
889

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



