Jak zapobiegać głodowaniu w C ++ 11

Zastanawiam się tylko, czy w C ++ 11 istnieje jakaś polityka blokowania, która zapobiegałaby głodowaniu wątków.

Mam kilka wątków, które rywalizują o jeden muteks. Teraz mój problem polega na tym, że wątek, który opuszcza sekcję krytyczną, zaczyna natychmiast rywalizować o ten sam muteks i przez większość czasu wygrywa. Dlatego inne wątki czekające na muteksie głodują.

Nie chcę, aby wątek, pozostawiając sekcję krytyczną, spał przez pewien minimalny czas, aby dać innym wątkom szansę na zablokowanie muteksu.

Pomyślałem, że musi istnieć jakiś parametr, który umożliwiłby sprawiedliwe blokowanie wątków oczekujących na muteksie, ale nie byłem w stanie znaleźć żadnego odpowiedniego rozwiązania.

Cóż, 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 programu planującego i zależy od implementacji wątku programu planującego, jeśli zmienia harmonogram wątków lub nie.

Czy istnieje sposób zapewnienia uczciwej polityki blokowania wątków czekających na ten sam mutex w C ++ 11? Jakie są zwykłe strategie?

Dzięki

questionAnswers(1)

yourAnswerToTheQuestion