PDA

View Full Version : Sincronizzazione con semafori di tipo singolo-multiplo


markjava
14-10-2013, 09:06
Salve ragazzi. Ho un problema. So utilizzare abbastanza bene i semafori e quindi fare sincronizzazione e mutua esclusione quando si richiede di utilizzarli per questi scopi.
Premetto che è già un paio di giorni che ci sbatto la testa purtroppo non riesco a trovare alcuna soluzione.
Il problema è il seguente:
"Ci sono m thread scrittori ed n thread lettori che condividono una memoria (un vettore di interi). L'accesso da parte dei lettori non richiede alcuna mutua esclusione fra loro, quindi possono entrarvi quanti lettori vogliono contemporaneamente. In scrittura invece c'è il bisogno di avere mutua esclusione sia con i lettori che con gli scrittori, nel senso che quando uno scrittore vuole scrivere nella coda, non deve esserci nessun altro scrittore e lettore che sta scrivendo o leggendo dalla coda."

Allora io ho optato per la seguente soluzione: ho un semaforo mutex settato a 1 nella classe degli scrittori, in modo tale che sia garantita la mutua esclusione tra tutti gli scrittori. Ora il problema sta come fare la mutua esclusione fra i lettori ed i scrittori, perché se mettessi un semaforo mutex_scrittorelettore condiviso fra le due classi, garantirebbe la mutua esclusione fra la classe scrittore e lettore, ma automaticamente più lettori non potranno entrarvi contemporaneamente, in quanto il semaforo mutex_scrittorelettore essendo settato ad 1, o fa entrare un lettore o uno scrittore.
La mia domanda è: Ora come faccio ad avere mutua esclusione tra lettore e scrittori, consentendo però più accessi da parte dei lettori?!?!?!
Ringrazio anticipatamente a tutti per le risposte!!!