繁体   English   中英

如何证明并发对象是可线性化的?

[英]How to prove that a concurrent object is linearizable?

有没有一种方法可以证明对象是否可线性化? 例如对于下面的代码。 如何证明计数器是可线性化的?

这是共享计数器的算法:


CompareAndSet R = new CompareAndSet(0);

increment() {
   Boolean ret; int r;
   repeat r = R.read(); ret = R.cas(r, r+1)
   until(ret = true)
   return
}

read() {
 return R.read();
}

CompareAndSet 是一个包含以下内容的对象:

  • 一个 int v
  • 方法 read():返回 v 的值
  • 方法 cas(expected, update):接受 2 个参数:一个expected和一个update值。 如果当前v值等于期望值,则将其替换为更新值; 否则,该值保持不变。 方法调用返回一个布尔值,指示值v是否改变。

一般来说,你需要证明,对于每个对并发对象进行变异的方法,都有一个“线性化点”,该方法在该点生效。

对于你的柜台来说,这是微不足道的。 如果我们假设R.cas()是原子执行的,那么increment()线性化点就是R.cas()成功更新值的时间。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM