Wpis z mikrobloga

@stiv95: ten warning jest spowodowany bugiem związanym ze zmienną warunkową. Bug występował w clangu i w gcc.
https://gcc.gnu.org/bugzilla//show_bug.cgi?id=101978
Sprawdziłem na gcc 10 i rzeczywiście sanitizer spłakał się, że niby robi się podwójny lock. Potem skompilowałem to na gcc 12 i warning zniknął.
Na tym zabawa się nie kończy, bo niżej wypluwa warning o wyścigu danych, a dzieje się tak, bo dostęp do production_stopped jest zrealizowany nieprawidłowo. Zapis i odczyt trzeba albo
@stiv95: w tym kodzie może być jeszcze więcej problemów, bo np. teraz zauważyłem, że dostęp do kolejki jest realizowany poza sekcją krytyczną (zobacz !q.empty())
@stiv95: pewnie zadziała, ale nie wygląda to na najszczęśliwsze rozwiązanie. Gdy konsument dobierze się do sekcji krytycznej, to zablokuje innych producentów i konsumentów, aż do całkowitego opróżnienia kolejki. Kiepsko.
@stiv95 Tak w ogóle to możesz wyrzucić tego checka na rozmiar kolejki z while'a. Powiedziałbym że to nawet nie najlepsze rozwiązanie, bo gdy konsumenci opróżnią kolejkę zanim producenci ją wypełnią, stracisz wątki konsumentów.