Originariamente inviato da programmerscafe
In genere per questo tipo di cose si usano i semafori e mutex. Quello che devi fare e' creare un sistema che consenta un solo processo scrittore alla volta e che consenta piu' processi lettori. I dettagli di implementazione dipendono dalle API che usi, e io non sono uno specialista di programmazione multithread comunque piu' o meno la cosa dovrebbe andare cosi':
se sono scrittore:
// questo si blocca finche' non ci non ne scrittori ne lettori
// e' consentito un solo scrittore alla volta
acquisisci mutex "scrittori"
scrivi
rilascia il mutex "scrittori"
se sono lettore:
// questo si blocca se ci sono scrittori ma entra se ci sono lettori
// sono consentiti piu' lettori alla volta
acquisici semaforo "lettori"
leggi qualcosa
riascia semaforo "lettori"
Il vero nocciolo del problema e' implementare un sistema di acquisizione di mutex/semafori che sia sicuro dato che per ottenere mutex scrittori si deve controllare il semaforo lettori e per ottenere il semaforo lettori si deve controllare anche il mutex scrittori. L'implementazione dell'acquisizione di mutex e semafori devono a loro volta essere sezioni esclusive (protette da mutex).
Non so se la stessa cosa si possa implementare con un singolo semaforo o se ci sono api che facilitano le cose, non lo escluderei del tutto.
Ciao