Ciao a tutti, sto entrando nel mondo della programmazione ad oggetti, ed ho un dubbio riguardo produttori consumatori ecc..
In pratica sto cercando di fare un esercizio e non so se lo sto facendo bene. Tralasciando creazioni di classi e cose varie, il fulcro è: devo utilizzare 3 thread per gestire una TreeMap:
Thread 1: inserisce un nuovo elemento nella mappa...
l'inserimento deve essere concorrente rispetto agli altri thread, secondo uno schema di produttori/consumatori
Thread 2: visualizza dei dati della mappa...
la lettura deve essere concorrente rispetto gli altri thread, secondo uno schema di lettori/consumatori
Thread 3: cancella degli elementi dalla mappa...
l'eliminazione deve essere concorrente rispetto agli altri thread, secondo uno schema di produttori/consumatori.
Ora io questa cosa la intendo così: thread 1 è un produttore, thread 3 è un consumatore, thread 2 è un lettore e Thread1-thread3 si possono intendere come "scrittori".
Se non sbaglio, nello schema produttori/consumatori, nel metodo "put" (quello del produttore) il thread si deve mettere in wait() quando la mappa è piena, mentre nel metodo "remove" (quello del consumatore) il thread si deve mettere in wait() quando la mappa è vuota.
Mentre nello schema lettori/scrittori, un lettore non può leggere durante la scrittura di uno scrittore (e viceversa) quindi per esempio (nel mio caso) uso i lock (e quindi il lettore se writeLock è true aspetta, se false va, mentre uno scrittore se readLock è true aspetta altrimenti va). Giusto fin qui?
Se è giusto, l'esercizio che ho appena scritto, sarebbe un insieme di queste cose, giusto?
Quindi sarebbe una cosa del tipo:
/*produttore*/
while (readLock || "mappa piena")
wait();
/*consumatore*/
while (readLock || "mappa vuota")
wait();
/*lettore*/
while (consLock || prodLock)
wait();
Confermate?