Мьютексы гарантируют порядок приобретения?

Недавно у коллеги возникла проблема, которая сводилась к следующей последовательности событий в приложении C ++ с двумя потоками:

Поток A содержит мьютекс.

Пока поток A удерживает мьютекс, поток B пытается его заблокировать. Поскольку он удерживается, поток B приостановлен.

Поток A завершает работу, для которой он удерживал мьютекс, освобождая мьютекс.

Вскоре после этого поток А должен коснуться ресурса, защищенного мьютексом, поэтому он снова его блокирует.

Похоже, что поток A снова получает мьютекс; поток B все еще ждет, хотя он сначала «запросил» блокировку.

Соответствует ли эта последовательность событий семантике, скажем, C ++ 11?std::mutex и / или темы? Я могу честно сказать, что никогда раньше не думал об этом аспекте мьютексов.

Ответы на вопрос(6)

Ваш ответ на вопрос