次回の並行システム試験の準備として、教科書「マルチプロセッサプログラミングの芸術」からいくつかの質問に答えようとしています。1つの質問は私を悩ませています:
演習129: LockFreeStackオブジェクトのプッシュとポップの両方に同じ共有BackOffオブジェクトを使用することは意味がありますか?EliminationBackOffStackで、空間と時間のバックオフを他にどのように構成できますか?
この質問は私を悩ませます。最初に頭に浮かぶのは、バックオフオブジェクトが行うのはプロセスを待機させることだけなので、意味がないということです。共有してみませんか?質問の2番目の部分は完全に私を避けており、どんな助けでも大歓迎です。
LockFreeStackのコード:
public class LockFreeStack<T> {
AtomicReference<Node> top = new AtomicReference<Node>(null);
static final int MIN_DELAY = ...;
static final int MAX_DELAY = ...;
Backoff backoff = new Backoff(MIN_DELAY, MAX_DELAY);
protected boolean tryPush(Node node) {
Node oldTop = top.get();
node.next = oldTop;
return(top.compareAndSet(oldTop, node));
}
public void push(T value) {
Node node = new Node(value);
while (true) {
if (tryPush(node)) {
return;
} else {
backoff.backoff();
}
}
}