Quote Originariamente inviata da andbin Visualizza il messaggio
Ma ..... per una mappa? Cosa vuol dire bloccarsi? Quale è il senso della attesa? Un lettore si blocca solo quando la mappa è vuota? Oppure si blocca quando la chiave che sta cercando non c'è nella mappa? O altro?
Grazie per avermi risposto.
Hai assolutamente ragione.
Però sono stato impreciso io nella spiegazione, perchè l'esercizio dice che un lettore, se la chiave dell'elemento da leggere non è presente oppure se non ci sono elementi nella mappa, deve lanciare un'eccezione. Quindi questo discorso lo devo gestire così.
Stessa cosa per i produttori, che lanciano un'ecezione se la mappa è piena (si per l'esercizio la mappa ha un limite), e per i consumatori, che lanciano un'eccezione se l'elemento da eliminare non c'è (quindi non c'è la chiave).

I miei dubbi sono nella parte di esercizio dove dice "secondo uno schema di produttori/consumatori" e "lettori/scrittori". Ma in che senso? Questi schemi sono quelli che ho detto io (ovviamente sono da adattare alle mappe)?
cioè (supponendo sia una coda) produttore/consumatore possono lavorare senza "disturbarsi" (nella coda il prod aggiunge elementi mentre cons elimina elementi dalla testa, quindi prod e cons non si toccano e possono lavorare contemporaneamente), prod aspetta solo quando la coda è piena mentre cons aspetta quando la coda è vuota; mentre lettore e scrittore non possono lavorare contemporaneamente, quindi se c'è un lettore che legge (quindi fissando il suo lock a true) lo scrittore deve aspettare, e viceversa.
Se questi fossero gli schemi di cui l'esercizio parla, devono effettivamente essere adattati alle mappe, e non capisco come...
Perchè se seguissi gli schemi che ho scritto, significherebbe che (lasciando stare le eccezioni), il produttore deve aspettare solo quando c'è il lettore che legge, il consumatore deve aspettare solo quando c'è il lettore che legge, il lettore deve aspettare se c'è il produttore o il consumatore che stanno "lavorando". E' corretto?