Есть ли способ доказать, линеаризуем ли объект? Например, для кода ниже. Как доказать, что счетчик линеаризуем?
вот алгоритм общего счетчика:
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(ожидаемый, обновление): принимает 2 аргумента: значение
expected
и значениеupdate
. Если текущее значениеv
равно ожидаемому значению, то оно заменяется значением обновления; в противном случае значение остается неизменным. Вызов метода возвращает логическое значение, указывающее, изменилось ли значениеv
.