并发编程中的屏障算法解析
1. 静态树屏障
1.1 背景与动机
在并发编程中,之前的屏障算法存在一些问题。简单屏障和反转感知屏障存在竞争问题,而组合树屏障则有过多的通信开销,并且线程遍历节点的顺序不可预测,这在无缓存的 NUMA 架构上难以进行布局。因此,静态树屏障应运而生,它既能实现静态布局,又能减少竞争。
1.2 内部节点类
private class Node {
AtomicInteger count;
Node parent;
volatile boolean sense;
public Node() {
sense = false;
parent = null;
count = new AtomicInteger(radix);
}
public Node(Node myParent) {
this();
parent = myParent;
}
public void await() {
boolean mySense = threadSense.get();
int position = count.getAndDecrement();
if (position == 1) { // I’m last
if (parent != null) { // Am I root?
parent.await();
}
超级会员免费看
订阅专栏 解锁全文
64

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



