Como evitar threads de fome em C ++ 11

Eu só estou querendo saber se existe alguma política de bloqueio em C + + 11, o que impediria threads de fome.

Eu tenho um monte de threads que estão competindo por um mutex. Agora, meu problema é que o thread que está deixando uma seção crítica começa imediatamente a competir pelo mesmo mutex e na maioria das vezes ganha. Portanto, outros threads aguardando no mutex estão morrendo de fome.

Eu não quero deixar o thread, deixando uma seção crítica, dormir por um período mínimo de tempo para dar outros segmentos a chance de bloquear o mutex.

Eu pensei que deveria haver algum parâmetro que permitisse um bloqueio justo para threads aguardando no mutex, mas não consegui encontrar nenhuma solução apropriada.

Bem, eu encontrei std :: this_thread :: yield () função, que supostamente para reagendar a ordem de execução de threads, mas é apenas dica para o thread do scheduler e depende da implementação de thread do scheduler se reprogramar os threads ou não.

Existe alguma maneira como fornecer política de bloqueio justo para os segmentos que aguardam o mesmo mutex no C ++ 11? Quais são as estratégias usuais?

obrigado

questionAnswers(1)

yourAnswerToTheQuestion