无阻塞并发的模块化终止验证
1. 共享数据结构的区域类型定义
为了处理共享数据结构,我们定义了区域类型 TStack 。该类型由栈的地址进行参数化,其抽象状态包含栈中的节点列表 ns 、已弹出节点的集合 ds 以及一个序数 α 。 TStack 区域类型的解释如下:
I(TStackr(x, ns, ds, α)) ≜∃y. x →y ∗stack(y, ns, ds)
我们使用单个防护 G 来赋予线程对栈进行压入和弹出操作的权限。转换系统如下:
G : ∀n, v, ns, ds, α, β < α. (ns, ds, α) ⇝((n, v) : ns, ds, β)
G : ∀n, v, ns, ds, α. ((n, v) : ns, ds, α) ⇝(ns, (n, v) ⊎ds, α)
第一个操作允许我们将元素添加到栈顶,第二个操作允许我们移除栈顶元素并将其添加到已丢弃节点的集合中。空栈的弹出操作没有显式的转换,因为该操作不会改变抽象状态。
需要注意的是,对于每个转换 (ns, ds, α) ⇝(ns′, ds′, α′) ,都有 2·α + |ns| > 2 · α′ + |ns′| 。压入操
超级会员免费看
订阅专栏 解锁全文

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



