[英]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 是一个包含以下内容的对象:
expected
和一个update
值。 如果当前v
值等于期望值,则将其替换为更新值; 否则,该值保持不变。 方法调用返回一个布尔值,指示值v
是否改变。一般来说,你需要证明,对于每个对并发对象进行变异的方法,都有一个“线性化点”,该方法在该点生效。
对于你的柜台来说,这是微不足道的。 如果我们假设R.cas()
是原子执行的,那么increment()
线性化点就是R.cas()
成功更新值的时间。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.