Zastanawiam się, jakie są zalety wydajności wynikające z używania zmiennych warunkowych przez blokady mutex w pthreads.Zalety używania zmiennych warunkowych przez mutex
Co znalazłem to: "Bez zmiennych warunkowych programista musiałby mieć ciągłe pollingy wątków (prawdopodobnie w sekcji krytycznej), aby sprawdzić, czy warunek jest spełniony. Może to być bardzo kosztowne, ponieważ wątek byłby jest ciągle zajęty w tej czynności. Zmienna warunkowa to sposób na osiągnięcie tego samego celu bez odpytywania. " (https://computing.llnl.gov/tutorials/pthreads)
Wygląda jednak na to, że wywołania mutex są blokowane (inaczej niż w przypadku spin-lock). Stąd, jeśli wątek (T1) nie może uzyskać blokady, ponieważ inny wątek (T2) ma blokadę, T1 jest uśpiony przez system operacyjny i jest budzony tylko wtedy, gdy T2 zwalnia blokadę, a system operacyjny daje T1 blokadę. Wątek T1 tak naprawdę nie sonduje, aby uzyskać blokadę. Z tego opisu wynika, że nie ma żadnej korzyści z wydajności używania zmiennych warunkowych. W obu przypadkach nie ma udziału w głosowaniu. System operacyjny i tak zapewnia korzyści, jakie może zapewnić paradygmat warunkowo-zmienny.
Czy możesz wyjaśnić, co się właściwie dzieje.
prawo. Mutex pozwala tylko czekać, aż blokada będzie dostępna; zmienna warunku pozwala ci czekać, aż zmieni się jakiś warunek zdefiniowany przez aplikację. – caf
Dziękuję za przykład! Oczyściłem rzeczy :) – Abhi
Nie rozumiem, dlaczego nie można upuścić zmiennej warunku i po prostu użyć muteksa w kilku prostych przypadkach. Zdobądź mutex w stanie "praca jest dostępna". Następnie pozwól, aby wątek producenta przejął muteks, a wątek roboczy spróbuje go zdobyć. Kiedy praca jest dostępna, producent odblokowuje muteks. Następnie system operacyjny obudzi pracownika z nabytym muteksem, a pracownik przejdzie do końca, a następnie zasnął (samo zakleszczenie), próbując ponownie pozyskać własny muteks. Gdy producent ma więcej pracy, może odblokować muteks. Może być konieczne sprawdzenie, czy muteks jest najpierw zablokowany. – Eloff