并发栈与消除机制详解
1. 引言
栈(Stack )是一种后进先出(LIFO)的数据结构,提供了 push() 和 pop() 方法。从表面上看,栈似乎不太适合并发操作,因为 push() 和 pop() 操作需要在栈顶进行同步。然而,栈并非天生就是顺序执行的,我们可以实现具有高度并行性的并发栈。首先,我们来看看如何构建一个无锁栈,其中 push() 和 pop() 操作在单个位置进行同步。
2. 无界无锁栈
无锁栈是一个链表,其中 top 字段指向第一个节点(如果栈为空则为 null)。为了简单起见,通常假设向栈中添加 null 值是非法的。
以下是相关代码:
// 节点类
public class Node {
public T value;
public Node next;
public Node(T value) {
this.value = value;
next = null;
}
}
// 无锁栈类
public class LockFreeStack<T> {
AtomicReference<Node> top = new AtomicReference<Node>(null);
static final int MIN_DELAY = ...;
static final int MAX_DELAY = ...;
Backoff backoff = new Backoff(MIN_DELAY, MAX_DELAY);
p
超级会员免费看
订阅专栏 解锁全文
3114

被折叠的 条评论
为什么被折叠?



