Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno mysql++ a multithread aplikacia

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.

Reakce na odpověď

1 Zadajte svou přezdívku:
2 Napište svou odpověď:
3 Pokud chcete dostat ban, zadejte libovolný text:

Zpět do poradny