微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决我从共识号较小的对象构造了共识号为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 举报,一经查实,本站将立刻删除。