Ten priklad bol povodne takto:
Thread Reader: ThreadWriter:
mutex_lock(mutex); mutex_lock(mutex);
while (is_writer) cond_wait(w_cond, mutex); while (count != 0) cond_wait(r_cond, mutex);
count ++; is_writer = TRUE;
mutex_unlock(mutex); mutex_unlock(mutex);
… …
// reading // writing
… …
mutex_lock(mutex); mutex_lock(mutex);
count --; is_writer = FALSE;
if (count == 0) cond_signal(r_cond); cond_signal(w_cond);
mutex_unlock(mutex); mutex_unlock(mutex);
Je to priblizne to iste az na to, ze ja tam mam namiesto jodneho mutexu dva co je asi ta chyba, ktoru si popisoval a is_write = true by malo byt asi pre while (count != 0) cond_wait(r_cond, mutex). Zdroj:http://www2.fiit.stuba.sk/~cernans/pp/pp_texts/pp_ prednaska_5_synchronizacia.pdf
Tie vlakna som neukoncoval (teda necakal som na ne v hlavnom vlakne cez join) ako pises, pretoze aplikacia ma bezat nonstop. Snazil som sa zachytit kill signal a ukoncovat aplikaciu tak, ale neustale mi to tam havaruje, tak som to odlozil na neskor. Zatial potrebujem aby sa mi to nezaseklo ako teraz a potom ostatne doladim.
Da sa s tym pthread_rwlock_t robit aj podmienene zamykanie podobne ako tu? Aj ked neviem ci to vyriesi moj problem pretoze k odomknutiu jodneho vlakna nedoslo ako som pisal, ale mozem vyskusat toto a uvidim co sa stane.