Wpis z mikrobloga

#programowanie #cpp
czy muszę używać mutexów jeżeli w jednym wątku tylko zapisuję, a w drugim tylko odczytuję? w przypadku kolejki wiadomo, że muszę, ale jeżeli mam np. zmienną int "status" i tylko ją sobie printuję w głownym wątku, a w wątku dodatkowym zmieniam?
  • 12
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@s_theCapt: Jeśli nie chcesz użyć mutexa i instrukcji atomic, to daj status jako volatile int i w wątku odczytującym, przed odczytem - read barrier, a w wątku zapisującym, po zapisie - write barrier
  • Odpowiedz
@afe1: atomic wydaje się bardzo automatyczne, po prostu wpisałem atomic w kodzie, nic nie zmieniałem i dziala... czy robię coś źle, czy dajesz alternatywę po prostu?
  • Odpowiedz
@s_theCapt: mutexy (i w zasadzie wszystkie inne prymitywy do synchronizacji) zapewniają memory barrier: w skrócie to chodzi o to, że wątek modyfikujący musi powiedzieć w jakiś sposób innym wątkom (np. przy pomocy MESI), że coś się stało. Zasada jest taka, że jak masz wiele wątków i chcesz współdzielić jakieś zasoby to musisz używać mechanizmów synchronizacji np. mutexów albo atomiców. Oczywiście jest wiele sposobów np. tworzysz wątek w mainie i
  • Odpowiedz
@Saly: no niestety tu mam wątek który chodzi równolegle i robi więcej niż ten główny, ale od czasu do czasu muszę coś sczytać (i użyłem teraz tych atomiców do tego), albo wysłać polecenie (do tego używam muteksa na kolejce z poleceniami)
  • Odpowiedz