Os mutexes garantem a ordem de aquisição?

Um colega de trabalho teve um problema recentemente que se resumiu ao que acreditamos ser a seguinte sequência de eventos em um aplicativo C ++ com dois threads:

O segmento A contém um mutex.

Enquanto o segmento A está segurando o mutex, o segmento B tenta travá-lo. Uma vez que é mantido, o segmento B está suspenso.

O segmento A finaliza o trabalho para o qual estava segurando o mutex, liberando o mutex.

Logo em seguida, o segmento A precisa tocar em um recurso protegido pelo mutex, para bloqueá-lo novamente.

Parece que o segmento A recebe o mutex novamente; o segmento B ainda está aguardando, mesmo que "tenha solicitado" o bloqueio primeiro.

Essa sequência de eventos se encaixa na semântica de, digamos, C ++ 11std::mutex e / ou pthreads? Posso dizer honestamente que nunca pensei sobre esse aspecto dos mutexes antes.

questionAnswers(6)

yourAnswerToTheQuestion