In generale quando c'è da accedere ad una variabile condivisa tra più thread (e reader_count lo è) si tende a farlo acquisendo il lock su un mutex per poi rilasciarlo ad accesso avvenuto, ed è quello che avviene con "mutex".
Il senso generale del codice però non è chiaro. Perché reader_count viene incrementato ad ogni iterazione di ogni singolo thread lettore? Avrebbe più senso incrementarlo una volta quando il thread viene creato e decrementarlo quando il thread termina la sua esecuzione, al di fuori del ciclo, cosa peraltro in tal caso impossibile visto che il ciclo è potenzialmente infinito.
Dove hai trovato questo codice?