Zastanawiam się tylko, czy istnieje polityka blokowania w C++ 11, która zapobiegnie głodom wątków.Jak zapobiegać głodom wątków w C++ 11
Mam wiele wątków, które rywalizują o jeden mutex. Teraz mój problem polega na tym, że wątek, który opuszcza krytyczną sekcję, zaczyna natychmiast rywalizować o ten sam muteks i przez większość czasu wygrywa. Dlatego też inne wątki oczekujące na muteks są głodne.
Nie chcę, aby wątek, pozostawiając krytyczną sekcję, spał przez jakiś minimalny czas, aby inne wątki mogły zablokować muteks.
Pomyślałem, że musi istnieć jakiś parametr, który umożliwiłby uczciwe blokowanie wątków oczekujących na muteksie, ale nie byłem w stanie znaleźć żadnego odpowiedniego rozwiązania.
Znalazłem funkcję std :: this_thread :: yield(), która zakłada zmianę harmonogramu wykonywania wątków, ale jest to tylko wskazówka dla wątku harmonogramu i zależy od implementacji wątku harmonogramu, jeśli przestawia wątki, czy nie.
Czy istnieje sposób zapewnienia sprawiedliwego zamknięcia dla wątków oczekujących na ten sam muteks w C++ 11? Jakie są zwykle stosowane strategie?
Dzięki
http://stackoverflow.com/questions/11666610/how-to-give-priority-to-privileged-thread-in-mutex-locking Oto link, który może Ci pomóc !! –
Wygląda na to, że nie jest to problem z głodem wątku, ale możesz opublikować kod, aby inni mogli go zobaczyć i być może pomóc. – dirvine
Powinieneś nie mieć mnóstwa wątków rywalizujących o jeden muteks - jeśli twój kod jest tym numerem seryjnym, który tylko jeden wątek może działać naraz, dlaczego nie ma mniej wątków? Istnieją ważne powody, ale nie wszystkie są tak ważne, i mogą mieć różne odpowiedzi! – Yakk