pthread_cond_timedwait, pthread_cond_wait
Имя
pthread_cond_timedwait, pthread_cond_wait — функции ожидания условия.
Синопсис
THR
#include <pthread.h>
int pthread_cond_timedwait ( pthread_cond_t *restrict
int pthread_cond_wait (pthread_cond_t *restrict
Описание
Функции pthread_cond_timedwait() и pthread_cond_wait() используются для блокирования потоков по условной переменной. Они вызываются с использованием мьютекса
Эти функции автоматически освобождают мьютекс mutex и обеспечивают блокирование вызывающего потока по условной переменной
При успешном выполнении мьютекс будет заблокирован, а владеть им будет вызывающий поток.
При использовании условных переменных всегда существует булев предикат, совместно используемый этими переменными, которые связаны с каждым ожидаемым условием. Это условие становится истинным, если поток должен продолжать выполнение. При использовании функций pthread_cond_timedwait() или pthread_cond_wait () возможны фиктивные запуски. Поскольку возврат из этих функций не подразумевает ничего, кроме оценки значения упомянутого выше предиката, он должен вычисляться после каждого такого выхода из функции.
Результат использования нескольких мьютексов для параллельно выполняемых операций pthread_cond_timedwait () или pthread_cond_wait () по одной и той же условной переменной не определен; другими словами, условная переменная связывается с уникальным мьютексом, когда поток ожидает заданного значения условной переменной, и это (динамическое) связывание завершится вместе с завершением ожидания.
Ожидание условия (синхронизированное или нет) представляет собой «точку отмены». Если статус возможности аннулирования дл
Поток, который был разблокирован по причине отмены в то время, пока он был заблокирован в вызове функции pthread_cond_timedwait() или pthread_cond_wait (), не будет использовать условный сигнал, который можно направить параллельно на условную переменную, если существуют другие потоки, заблокированные по этой условной переменной.
Функция pthread_cond_timedwait() эквивалентна функции pthread_cond_wait (), за исключением того, что она возвращает код ошибки, если абсолютное время, заданное пара
C S Если поддерживается опция Clock Selection, условная переменная будет иметь атрибут часов, определяющий механизм, который предназначен для измерения времени, заданного параметром
Если потоку, ожидающему значения условной переменной, передается сигнал, то при возврате из обработчика сигнала поток возобновит ожидание этой условной переменной (как будто не было никакого прерывания на обработку сигнала) или возвратит нуль вследствие фиктивного запуска.
Возвращаемые значения
За исключением кода ошибки [ETIMEDOUT], все проверки на наличие ошибок реализованы так, как если бы они были выполнены в самом начале работы каждой функции, и код ошибки в случае ее обнаружения возвращается до модификации состояния мьютекса, заданного пара
При успешном завершении возвращается нулевое значение; в противном случае — код ошибки, обозначающий ее характер.
Ошибки
Функция pthread_cond_timedwait () завершится неудачно, если:
[ETIMEDOUT] вре
Функции pthread_cond_timedwait() и pthread_cond_wait()
[EINVAL] значение, заданное хотя бы одни
[EINVAL] для выполнения параллельных операций pthread_cond_timedwait() или pthread_cond_wait () по одной и той же условной пере
[EPERM] во вре
Эти функции не возвращают код ошибки [EINTR].
Примеры
Отсутствуют.
Замечания по использованию
Отсутствуют.
Логическое обоснование
Семантика ожидания по условию
Важно от