如何解决我从共识号较小的对象构造了共识号为n的对象,这是什么错误?
当我尝试解决《多处理器编程的艺术》的练习68时,提出了这个问题。
给定n个具有read
/ write
/ getAndIncrement
的寄存器,它们的共识数均不得大于2。
首先实现仅包含enq
和first
的队列:
class Queue {
AtomicInteger head = new AtomicInteger(0);
atomicreference items[] =
new atomicreference[Integer.MAX_VALUE];
void enq(Object x){
int slot = head.getAndIncrement();
items[slot] = x;
}
Object first() {
return items[0];
}
}
然后我可以使用此队列为任意n个线程实现decide
:
class Consensus {
protected T[] proposed = (T[]) new Object[N];
private Queue q = new Queue;
public Object decide(Object value) {
int i = ThreadID.get();
proposed[i] = value;
q.enq(i);
int j = q.first();
return proposed[j];
}
}
我不明白问题出在哪里。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。