Verhindern, dass Threads in C ++ 11 verhungern

Ich frage mich nur, ob es in C ++ 11 eine Sperrrichtlinie gibt, die das Verhungern von Threads verhindern würde.

Ich habe eine Reihe von Threads, die um einen Mutex konkurrieren. Mein Problem ist nun, dass der Thread, der einen kritischen Abschnitt verlässt, sofort um denselben Mutex kämpft und die meiste Zeit gewinnt. Daher hungern andere Fäden, die auf den Mutex warten.

Ich möchte nicht, dass der Thread, der einen kritischen Abschnitt verlässt, eine minimale Zeitspanne ruht, damit andere Threads den Mutex sperren können.

Ich dachte, dass es einige Parameter geben muss, die ein faires Sperren für Threads ermöglichen, die auf den Mutex warten, aber ich konnte keine geeignete Lösung finden.

Nun, ich habe die Funktion std :: this_thread :: yield () gefunden, die davon ausgeht, dass die Reihenfolge der Thread-Ausführung neu geplant werden soll. Dies ist jedoch nur ein Hinweis auf den Scheduler-Thread und hängt von der Implementierung des Scheduler-Threads ab, ob die Threads neu geplant werden oder nicht.

Gibt es eine Möglichkeit, eine faire Sperrrichtlinie für die Threads bereitzustellen, die in C ++ 11 auf denselben Mutex warten? Was sind die üblichen Strategien?

Vielen Dank

Antworten auf die Frage(1)

Ihre Antwort auf die Frage