Durante la lettura del codice sorgente di ArrayBlockingQueue
, ho trovato un commento spiegando che utilizza "il classico algoritmo di due condizioni si trovano in qualunque libro di testo":perché Concorrenza controllo utilizza il classico algoritmo di due condizioni
/*
* Concurrency control uses the classic two-condition algorithm
* found in any textbook.
*/
/** Main lock guarding all access */
private final ReentrantLock lock;
/** Condition for waiting takes */
private final Condition notEmpty;
/** Condition for waiting puts */
private final Condition notFull;
Perché utilizza l'algoritmo classico a due condizioni (notEmpty, notFull)?
Esso consente di svegliarsi solo discussioni interessati a tutto ciò che è appena successo. Ad esempio, un thread che tenta di "prelevare" da una coda vuota, è interessato solo alla coda che non è vuota (c'è qualcosa da fare), ma non si preoccupa che la coda non sia piena. – assylias
Questa è una bella * risposta * :) –
La tua domanda suggerisce che non sei d'accordo o non capisci la decisione dell'autore. Quale altro approccio sai che avrebbe potuto scegliere, invece? – seh