Шрифт:
Возвращаемые значения:
Ожидание условия
Вызов функции блокирует вызвавший поток на условной переменной
Не следует использовать условную переменную с мьютексом, у которого разрешен рекурсивный захват.
Возвращаемые значения:
• не инициализированы переменные, на которые указывают
• попытка использования переменной, на которую указывает
• вызвавший поток не владеет указанным мьютексом.
Поведение функции идентично варианту обычного ожидания, за исключением того, что ожидание может завершиться также при наступлении времени, переданного параметром
Следует помнить, что после наступления времени тайм-аута управление совсем не обязательно вернется к вызвавшему потоку. После наступления этого времени функция переведет поток из состояния блокирования на условной переменной в состояние готовности и предпримет попытку захвата мьютекса. Если мьютекс в это время захвачен другим потоком, вызвавший поток перейдет в состояние блокирования на мьютексе.
Возвращаемые значения:
• не инициализированы переменные, на которые указывают
• попытка использования переменной, на которую указывает
• вызвавший поток не владеет указанным мьютексом.
Выполнение условия
Штатным способом разблокирования потока, блокированного на условной переменной, является вызов функции, сигнализирующей о выполнении условия. В native API это функция
Однако необходимо помнить про специфику ожидания внутри критической секции: вызов функции
Нештатным способом завершения ожидания на условной переменной может быть приход немаскированного сигнала UNIX. Если для данного сигнала определен обработчик, он выполнится без захвата мьютекса, а попытка захвата будет произведена уже после его завершения.