22、非阻塞并发的模块化终止验证

非阻塞并发的模块化终止验证

在并发编程领域,验证非阻塞并发程序的正确性一直是一个具有挑战性的问题。本文将介绍Total - TaDA逻辑,它首次能够用于证明细粒度非阻塞并发程序的完全正确性,并通过计数器和Treiber栈的案例来展示其应用。

计数器并发客户端证明

以下是一个计数器并发客户端的证明代码:

x := makeCounter();
∃s. C(s, x, 0, ω ⊕ω)
∃s, r. CClientr(s, x, 0) ∗[Inc(0, ω ⊕ω, 1)]r
∃s, v. CClientr(s, x, v) ∗[Inc(0, ω, 1/2)]r ∧0 ≤v
n := random(); i := 0;
∃s, v. CClientr(s, x, v) ∗[Inc(i, n, 1/2)]r ∧0 ≤v ∧i = 0
while (i < n) {
    ∀β.
    ∃s, v. CClientr(s, x, v) ∗[Inc(i, β, 1/2)]r ∧i ≤v ∧i < n ∧β = n −i
    incr(x); i := i + 1;
    ∃s, δ, v. CClientr(s, x, v) ∗[Inc(i, δ, 1/2)]r ∧i ≤v ∧i ≤n ∧δ = n −i ∧δ < β
}
∃s, v. CClientr(s, x, v) ∗[Inc(n, 0, 1/2)]r
∃s, v. CClientr(s, x, v) ∗[Inc(0, ω, 1/2)]r
m := random();
j := 0;
while (j < m) {
    incr(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值