Zajmuję się tworzeniem aplikacji, w której robię wielowątkowość. Jeden z moich wątków roboczych wyświetla obrazy na widżecie. Kolejny wątek odtwarza dźwięk. Chcę zatrzymać/zawiesić/wstrzymać/uśpić wątki w zdarzeniu kliknięcia przycisku. Jest taki sam, jak po kliknięciu przycisku odtwarzania/pauzy odtwarzacza wideo. Pracuję nad aplikacją w języku C++ na platformie linuksowej przy użyciu biblioteki pthread do gwintowania.Jak się przespać lub zatrzymać PThread in c na Linuksie
Czy ktoś może mi powiedzieć, w jaki sposób osiągam wątki wstrzymać/zawiesić?
Nie jest nigdy bezpiecznie uzyskać dostęp do globalnie udostępnianej zmiennej w środowisku wielowątkowym. Zablokuj muteks przed sprawdzeniem '! Play', a także użyj muteksu podczas ustawiania' play = 0; '. W praktyce nie będzie to problemem dla pojedynczego systemu, ale zawsze lepiej jest napisać poprawny/przyszłościowy kod. –
W praktyce nie będzie to problemem dla większości systemów wielordzeniowych, ale masz rację - to wymaga przynajmniej kilku barier pamięci. Bez nich przerwa może trwać dość długo, aby uzyskać efekt. Oczywiście samo blokowanie muteksa też jest w porządku, a ja zmienię tę odpowiedź, by to zrobić. :) – LnxPrgr3
@deft_code Odpowiedź zaktualizowana! Proszę jednak zobaczyć mój poprzedni komentarz. – LnxPrgr3