Krótka odpowiedź jest taka, że jest to trudny zaskakująco toczyć własne blokady odczytu/zapisu. Bardzo łatwo jest przeoczyć bardzo subtelny problem z synchronizacją, który może spowodować zakleszczenie, dwa wątki, oba myśląc, że mają "wyłączną" blokadę, itp.
W skrócie, musisz zachować liczbę aktywnych czytników w dowolnym czasie. Tylko wtedy, gdy liczba aktywnych czytników wynosi zero, należy przyznać dostęp do zapisu wątku. Istnieje kilka opcji wyboru, czy czytelnicy lub scenarzyści mają pierwszeństwo. (Często chcesz dać pisarzom priorytet, przy założeniu, że pisanie odbywa się rzadziej). (Zaskakująco) trudną częścią jest upewnienie się, że żaden autor nie ma dostępu, gdy są czytelnicy, lub odwrotnie.
Istnieje doskonały artykuł MSDN, "Compound Win32 Synchronization Objects", który prowadzi użytkownika przez proces tworzenia blokady czytnika/pisarza. Zaczyna się proste, a następnie staje się bardziej skomplikowane, aby obsłużyć wszystkie narożne przypadki. Jedną z rzeczy, która wyróżniała się, było to, że pokazali próbkę, która wyglądała doskonale. Potem wyjaśnili, dlaczego tak naprawdę nie zadziała. Gdyby nie wskazali problemów, być może nigdy nie zauważylibyście. Warto przeczytać.
Mam nadzieję, że to będzie pomocne.
Czy mówisz o normalnym muteksie lub Muteksie wielokrotnego odczytu/zapisu pojedynczego zaimplementowanym z muteksami/semaforami/zmiennymi warunkowymi? – stefaanv
@stefaanv: Nie jestem pewien, ale myślę, że jest to dla wielu muteksów zapisu/wielokrotnego zapisu zaimplementowanych ze zmiennymi mutexes/semaphres/condition. Czy jest coś takiego? – jasonline
Wielokrotne muteksy odczytu/zapisu pojedynczego nie są proste, po prostu miałem do nich dostęp i nie udało mi się :-(więc tutaj jest link wikipedia: http://en.wikipedia.org/wiki/Readers-writer_lock – stefaanv