En preparación para mi próximo examen de sistemas concurrentes, estoy tratando de completar algunas preguntas del libro de texto "El arte de la programación multiprocesador". Una pregunta que me está molestando:Programación multiprocesador: pilas sin bloqueo
Ejercicio 129: ¿Tiene sentido utilizar el mismo objeto BackOff compartida para ambos empuja y pop en nuestro objeto LockFreeStack? ¿De qué otra forma podríamos estructurar el retraso en el espacio y el tiempo en EliminationBackOffStack?
Esta pregunta me molesta porque la primera cosa que viene a la mente es que no tiene sentido, porque todo un objeto de retroceso no es hacer una espera de proceso, ¿por qué no compartirlo? La segunda parte de la pregunta me elude por completo y cualquier ayuda es bienvenida.
El código para el 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();
}
}
}
¿Qué método Backoff.backoff() realmente? ¿Qué es el "EliminationBackOffStack" mencionado?Proporcione más información sobre esas áreas. –
¿Podría proporcionarnos cierta información, o incluso código, para la clase {{Backoff}}? ¿Está haciendo algún tipo de retroceso exponencial? –
http://books.google.com/books?id=pFSwuqtJgxYC&lpg=PA253&ots=10QEvrNBh1&dq=eliminationbackoffstack&pg=PA253#v=onepage&q=eliminationbackoffstack&f=false –