Originariamente inviato da AspxTM
forse non riesco a capire la logica del producer consumer test
però da quanto vedo nel secondo esempio del thread cooperation è il thread (waitperson) che si mette in wait e il restourant lo richiama con la notify quando vengono persone, se ho ben capito.
No, è lo Chef (il thread produttore) che lo risveglia (guarda il corpo del run). Solo che, per poterlo fare, deve conoscerlo (avere un riferimento a lui), ed infatti il ristorante glielo passa durante la costruzione.

Questo, comunque, è un caso particolare: il primo caso è il classico:

Ho uno o più thread Consumatori
Ho uno o più thread Produttori
Ho un oggetto di sincronizzazione (il "parcheggio dei dati").

Consumatori e Produttori conoscono solo il parcheggio dei dati (hanno, ciascuno, un riferimento al parcheggio dei dati).

Il consumatore chiede un dato al parcheggio. Se nel parcheggio c'è il dato, lo ottiene e lo lavora; il parcheggio quindi chiama notify()/notifyAll() per risvegliare un produttore eventualmente in attesa. Se non c'è il dato, è il parcheggio che chiama wait() ed il consumatore si ferma.

Il produttore depone i dati nel parcheggio. Se nel parcheggio c'è posto, il dato viene depositato e il parcheggio chiama notify()/notifyAll() per risvegliare un consumatore eventualmente in attesa. Se non c'è posto, il parcheggio chiama wait() ed il produttore si ferma.


Ciao.