我从共识号较小的对象构造了共识号为n的对象,这是什么错误?

问题描述

当我尝试解决《多处理器编程的艺术》的练习68时,提出了这个问题。 给定n个具有read / write / getAndIncrement的寄存器,它们的共识数均不得大于2。

首先实现仅包含enqfirst的队列:

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 (将#修改为@)