Синхронизация и взаимодействие программных потоков в операционной среде реального времени. Дорогов А.Ю. - 33 стр.

UptoLike

Составители: 

33
Аргумент flags определяет подмножество условий блокировки, на кото-
рое распространяется действие тайм-аута. Каждое условие задается бито-
вой константой. Константы логически объединяются по «или». В табл. 2.8
представлены символические обозначения констант и их описания.
Аргумент notify является указателем на структуру, устанавливающую
тип уведомления о наступлении тайм-аута. Рекомендуемые типы уведом-
лений представлены в табл. 2.9.
Таблица 2.8
Константа Блокирующие состояния Порождающие вызовы
_NTO_TIMEOUT_CONDVAR STATE_CONDVAR. SyncCondvarWait()
_NTO_TIMEOUT_JOIN STATE_JOIN. ThreadJoin()
_NTO_TIMEOUT_INTR STATE_INTR. InterruptWait()
_NTO_TIMEOUT_MUTEX STATE_MUTEX. SyncMutexLock()
_NTO_TIMEOUT_RECEIVE STATE_RECEIVE. MsgReceive()
_NTO_TIMEOUT_REPLY STATE_REPLY. MsgSend()
_NTO_TIMEOUT_SEM STATE_SEM. SyncSemWait()
_NTO_TIMEOUT_SEND STATE_SEND. MsgSend()
_NTO_TIMEOUT_SIGSUSPEND STATE_SIGSUSPEND. SignalSuspend()
_NTO_TIMEOUT_SIGWAITINFO STATE_SIGWAITINFO. SignalWaitinfo()
Только SIGEV_UNBLOCK гарантирует, что наступит деблокировка по-
тока. Остальные виды уведомлений лишь информируют об истечении ин-
тервала тайм-аута. Если поле события имеет значение NULL, то это экви-
валентно SIGEV_UNBLOCK. Деблокируемый по тайм-ауту вызов возвраща-
ет ошибку с кодом ETIMEDOUT.
Таблица 2.9
Варианты уведомлений Описание
SIGEV_INTR Прерывание
SIGEV_PULSE Импульс
SIGEV_SIGNAL Сигнал
SIGEV_SIGNAL_CODE Сигнал реального времени
SIGEV_SIGNAL_THREAD Сигнал к потоку
SIGEV_UNBLOCK Деблокировка потока
Тайм-ауты запускаются по входу в одно из состояний блокировки, ука-
занное в аргументе flags. Сбрасывается тайм-аут при возврате из любого
системного вызова. Это означает, что необходимо заново «взводить» тайм-
аут перед каждым системным вызовом, к которому он применяется. Если
вместо параметра ntime указан NULL, то это предписывает ядру не блоки-