Хотя это не совсем ответ на ваш вопрос, важным аспектом того, как происходит разблокировка мьютекса, является то, что это должно быть сделано после структура переменной условия обновляется, чтобы отразить присутствие официанта , Это то, что означает стандарт, когда он говорит, что функция «атомарно» разблокирует мьютекс и ждет. В противном случае будет существовать такое же состояние гонки, как если бы вы просто разблокировали мьютекс перед вызовом pthread_cond_wait
: другой поток мог бы получить мьютекс и изменить состояние, от которого зависит предикат, после того, как вы проверили предикат (и нашли его ложным), но до Вы позвонили pthread_cond_wait
. Тогда вы пропустите сигнал и будете ждать в режиме ожидания, возможно, навсегда.