Concurrency 如何证明并发对象是可线性化的?
有没有一种方法可以证明一个物体是否可以线性化? 例如下面的代码。我如何证明计数器是线性的 以下是共享计数器的算法:Concurrency 如何证明并发对象是可线性化的?,concurrency,cpu-registers,mutual-exclusion,Concurrency,Cpu Registers,Mutual Exclusion,有没有一种方法可以证明一个物体是否可以线性化? 例如下面的代码。我如何证明计数器是线性的 以下是共享计数器的算法: 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(); } Compa
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是一个包含以下内容的对象:
- 整数v
- 方法read():返回v的值
- 方法cas(预期,更新):接受两个参数:一个
值和一个预期的
值。如果当前更新
值等于预期值,则将其替换为更新值;否则,该值保持不变。方法调用返回一个布尔值,指示值v
是否已更改李>v
对于你的柜台来说,这是微不足道的。如果我们假设
R.cas()
是以原子方式执行的,那么increment()
中的线性化点就是R.cas()
成功更新值的时间。我们如何证明线性化点是线性化点?