Когда поток вызывает pthread_cond_wait()
, он должен содержать связанный мьютекс.API освободит мьютекс, пока он блокирует поток.Как только API решит, что поток должен быть освобожден, он получит мьютекс перед возвратом из API.
Требуется удержание мьютекса, поскольку проверка условия с последующим вызовом pthread_cond_wait()
не является атомарной операцией.Мьютекс (и правильное использование мьютекса) не позволяет потоку пропустить условие, которое становится истинным за короткий промежуток времени между проверкой и вызовом ожидания.
Но короткий ответ на конкретный вопрос (как может другойпоток получает мьютекс), поскольку поток заблокирован в pthread_cond_wait()
, мьютекс не удерживается.