Chyba nie je priamo v tom, že používaš dva mutexy. Problém je len to, že tie mutexy nezamykáš/neodomykáš tak, ako by si mal. V predchádzajúcom príspevku som ti napísal, aký problém tam môže nastať (resp. nastane) - následkom toho prestane celá synchronizácia plniť svoj účel.
BTW: To is_writer = TRUE by naozaj malo byť pred tým cyklom - je to uvedené aj v tom zdroji na ďalšom slajde.
RW Lock je určený presne na takýto účel, takže nevidím dôvod pokúšať sa to implementovať vlastným spôsobom. Len pre upresnenie, v tomto kóde nie je žiadne podmienené zamykanie, ale čakanie na splnenie podmienky. Ešte lepšie povedané, ide o blokujúce čakanie na signál, ktoré je zabezpečené pomocou cond_wait (spolu s cond_signal).