int estado = leitura, aux; lock_t lock_e; /* Leitor: */ lock(lock_e); while (estado == escrita) cond_wait(cond_leit); aux++; unlock(lock_e); le(); lock(lock_e); aux--; if (aux == 0) cond_broadcast(cond_escr); unlock(lock_e); /* Escritor */ lock(lock_e); estado = escrita; n_escr++; while (aux != 0) cond_wait(cond_escr); unlock(lock_e); lock(lock_dados); escreve(); unlock(lock_dados); lock(lock_e); n_escr--; if (n_escr == 0) { estado = leitura; cond_broadcast(cond_leit); } unlock(lock_e);