La respuesta corta es que es sorprendentemente difícil de rodar su propio bloqueo de lectura/escritura. Es muy fácil pasar por alto un problema de tiempo muy sutil que podría resultar en un punto muerto, dos hilos pensando que tienen un bloqueo "exclusivo", etc.
En pocas palabras, necesita contar cuántos lectores están activos en cualquier momento en particular. Solo cuando el número de lectores activos es cero, debe otorgar acceso de escritura de subprocesos. Hay algunas opciones de diseño en cuanto a si los lectores o escritores tienen prioridad. (A menudo, desea dar prioridad a los escritores, en el supuesto de que la escritura se realiza con menos frecuencia). La parte (sorprendentemente) difícil es garantizar que ningún escritor tenga acceso cuando hay lectores, o viceversa.
Hay un excelente artículo de MSDN, "Compound Win32 Synchronization Objects" que lo guía a través de la creación de un bloqueo de lector/escritor. Comienza de manera simple, luego se vuelve más complicado manejar todas las cajas de esquina. Una cosa que sobresalió fue que mostraron una muestra que se veía perfectamente bien, y luego explicaron por qué en realidad no funcionaría. Si no hubieran señalado los problemas, es posible que nunca lo hayas notado. Bien vale la pena leer.
Espero que esto sea útil.
¿Está hablando de un mutex normal o un mutex de lectura múltiple/escritura simple implementado con mutexes/semáforos/variables de condición? – stefaanv
@stefaanv: No estoy seguro, pero creo que es para múltiples lecturas de escritura múltiple/mutex implementadas con mutexes/semaphres/variables de condición. ¿Hay tal cosa/camino? – jasonline
Múltiples repeticiones de lectura/escritura simple no son sencillas, solo tuve una oportunidad y fallé :-(así que aquí está el enlace de wikipedia: http://en.wikipedia.org/wiki/Readers-writer_lock – stefaanv