M. Herlihy和N. Shavit的“多处理器编程艺术”一书定义了静态一致性的以下原则[第3章,p。 50]:
正如我理解这两个原则一样,在静止之前和之后的方法调用应该按顺序执行,而不会有任何重叠。
作为一个例子,作者提供了第1章中的素数计数器,说明:
静态一致的共享计数器会返回数字,而不是 必须按
getAndIncrement()
请求的顺序,但始终 没有重复或省略数字。“
这是java的计数器代码:
public class Counter {
private long value;
public Counter(long i) {
value = i;
}
public long getAndIncrement() {
return value++;
}
}
Counter counter = new Counter(1);
void primePrint() {
long i = 0;
long limit = power(10, 10);
while (i < limit) {
i = counter.getAndIncrement();
if (isPrime(i)) {
print(i);
}
}
}
我无法理解为什么这个例子是静态一致的?正如我从代码中看到的,线程可能会重叠并返回重复项。本书第1章给出了相同的内容:[p。 5]
他们可能同时从值读取1,将其本地临时变量设置为1,将值设置为2,并且两者都返回1.