非阻塞并发的模块化终止验证
在并发编程领域,验证非阻塞并发程序的正确性一直是一个具有挑战性的问题。本文将介绍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(
超级会员免费看
订阅专栏 解锁全文
2411

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



