Скажем, у меня есть следующий метод в реализации стека без блокировок, поточно-ориентированный:
public boolean push(T value) {
Node node = new Node(value);
do {
node.next = head.get();
} while (!head.compareAndSet(node.next, node)); // Linearization Point
operations.incrementAndGet();
return true;
}
Считается ли отмеченная линия точкой линеаризации?
У меня сложилось впечатление, что линеаризацияточка - это единичная атомная точка, в которой состояние параллельного объекта было видоизменено, чтобы отразить предполагаемые эффекты конкретного вызова метода.Если это так, я не согласен с тем, действительно ли вызов compareAndSet()
является точкой линеаризации.Казалось бы, присутствие операции приращения в operations
вводит вторую атомную точку, в которой состояние параллельного объекта должно изменяться - что противоречит моему нынешнему пониманию того, что значит быть линеаризуемым.