示例静态一致吗?

时间:2017-11-10 14:15:25

标签: java multithreading concurrency consistency

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.

0 个答案:

没有答案