并发编程中的死锁避免与高阶通信表达性
1. 共享内存并发的死锁-free语义
1.1 并发示例分析
考虑线程集合 (transfer 50 a b) ∥ (deposit 10 b) ,假设指针 a 和 b 在存储中包含一些整数,且 S(a) ≥ 50 ,并且它们都是未锁定的。可达状态可以是 (S, {a}, ((a :=! a - 50)\a) ∥ (deposit 10 b)) ,从这个状态还能进一步达到 (S, {a, b}, ((a :=! a - 50)\a) ∥ ((b :=! b + 10)\b)) 。这表明从 a 到 b 的转账和向 b 的存款操作可以并行执行,存在一定的并发度。然而,如果 (deposit 10 b) 先执行,会锁定 b ,导致 (transfer 50 a b) 无法锁定 a ,因为它需要先锁定 b ,这说明某些防止死锁的条件有时过于严格,会排除一些无害的交错执行情况。
下面看一个指针创建的示例:
new x in lock∅x in new y in (thread (lock{x} y in (lock∅x in ())));
(lock
超级会员免费看
订阅专栏 解锁全文
41

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



