In preparazione per il mio prossimo esame Concurrent Systems, sto cercando di completare alcune domande dal libro "The Art of Multiprocessor Programming". Una domanda è bugging me:Programmazione multiprocessore: stack senza serratura
Esercizio 129: Ha senso utilizzare lo stesso oggetto backoff condivisa per entrambe le spinte e pop nel nostro oggetto LockFreeStack? In quale altro modo possiamo strutturare il backoff nello spazio e nel tempo in EliminationBackOffStack ?.
Questa domanda mi infastidisce perché la prima cosa che mi viene in mente è che non ha senso perché tutto ciò che un backoff fa è aspettare un processo, quindi perché non condividerlo? La seconda parte della domanda mi sfugge totalmente e ogni aiuto è il benvenuto.
Il codice per la 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();
}
}
}
Che cosa significa il metodo di Backoff.backoff() effettivamente fare? Di cosa si parla "EliminationBackOffStack"?Si prega di fornire ulteriori informazioni su quelle aree. –
Potresti fornire alcune informazioni, o anche codice, per la classe {{Backoff}}? Sta facendo una specie di backoff esponenziale? –
http://books.google.com/books?id=pFSwuqtJgxYC&lpg=PA253&ots=10QEvrNBh1&dq=eliminationbackoffstack&pg=PA253#v=onepage&q=eliminationbackoffstack&f=false –