Многопроцессорное программирование: lock-free stacks

Готовясь к предстоящему экзамену по параллельным системам, я пытаюсь ответить на несколько вопросов из учебника «Искусство многопроцессорного программирования». Меня беспокоит один вопрос:

Упражнение 129: Имеет ли смысл использовать один и тот же общий объект BackOff для push и pop в нашем объекте LockFreeStack? Как еще мы могли бы структурировать откат в пространстве и времени в EliminationBackOffStack?.

Этот вопрос меня беспокоит, потому что первое, что приходит мне в голову, это то, что он не имеет смысла, потому что все, что делает объект отсрочки, заставляет процесс ждать , так почему бы не поделиться этим? Вторая часть вопроса полностью ускользает от меня, и любая помощь приветствуется.

Код для 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();
            }
        }
    }
6
задан Anton Scholtz 9 November 2010 в 14:11
поделиться