- nedokonalost paralelního programování
- nedeterministické chování
- ikrementace o 1
- pokud chceme součet všech vláken = race
- pokud chceme aby tam nebyla nula = není race
- kompilátor nemůže vždy doplňovat bariéry, protože záleží o co se programátor snaží
- -> musí si hlídat programátor sám
- horší je částečný deadlock, špatně se detekuje
- při použítí jakýchkoli zámku, program není re-entrantní
- serializace = mezi načtením, změnou a použitím proměnné je nepřerušitelné místo
- kritická sekce = nepřerušitelná sekce
- musí být odolná vůči plánování
- pouze v přídadě, že máme HW podporu atomických operací!
pthread_attr_ - atribut / nastavení vlastností vlákna
phtread_create - vlákno se může spustit dřív, než se vrátí volání této funkce (může tedy i skončit)
- data pro vlákno musí připraveny před zavoláním funkce
- tip:
- před výpis z vlákna vypsání id, potom grep id a zjištění všech výpisů daného vlákna
pthread_cond_signal - probudí pouze jedno nějaké řekající vlákno - nemohu si rozhodtnou které
pthread_cond_broadcast - vzbudí se všechny vlákna, ale musí běžet po sobě
- pro každé vlákno drží jednu proměnnou
- write lock má přednost před read lock