// La cosa migliore sarebbe costruire una classe apposta. Lascio ai lettori // questo semplice esercizio. :-) // Variabili per ogni area HANDLE reader, writer, mutex; int readercount; void init_mutex() { readercount=0; reader = CreateMutex(NULL, FALSE, NULL); writer = CreateMutex(NULL, FALSE, NULL); mutex = CreateMutex(NULL, FALSE, NULL); } void done_mutex() { CloseHandle(reader); CloseHandle(writer); CloseHandle(mutex); } void reader_enter() { WaitForSingleObject(reader, INFINITE); WaitForSingleObject(mutex, INFINITE); if(++readercount==1) WaitForSingleObject(writer, INFINITE); // blocca l'ingresso di scrittori ReleaseMutex(mutex); ReleaseMutex(reader); } void reader_exit() { WaitForSingleObject(mutex, INFINITE); if(--readercount==0) ReleaseMutex(writer); ReleaseMutex(mutex); } void writer_enter() { WaitForSingleObject(reader, INFINITE); // blocca l'ingresso di ulteriori lettori WaitForSingleObject(writer, INFINITE); } void writer_exit() { ReleaseMutex(writer); ReleaseMutex(reader); }