说我在无锁,线程安全的Stack实现中具有以下方法:
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
上存在增量操作会引入第二个原子点,在该原子点上并发对象的状态应被突变-这与我目前对线性化的含义的理解背道而驰。>