问题描述
当我尝试解决《多处理器编程的艺术》的练习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 (将#修改为@)