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

UptoLike

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

37
смотрено в 3.5). В следующем фрагменте представлен набор флагов, кото-
рые используются при создании канала.
_NTO_CHF_COID_DISCONNECT – доставляет импульс к этому каналу по каждому свя-
занному с ним соединению, когда канал уничтожается. Только один канал в процессе может
иметь такой флаг установленным. Импульс характеризуется кодом (Pulse code) и значением
(Pulse value). Для данного флага импульс имеет характеристики:
Pulse code: _PULSE_CODE_COIDDEATH.
Pulse value: идентификатор соединения клиента (coid), который был прикреплен к унич-
тоженному каналу.
_NTO_CHF_DISCONNECT – доставляет импульс к этому каналу, когда разорвано по-
следнее из имевшихся соединений сервера с клиентами. Если процесс завершается без пред-
варительного разрыва всех его соединений, ядро уничтожает соединения автоматически. Ко-
гда этот флаг установлен, сервер должен вызвать ConnectDetach(scoid), где scoid есть иден-
тификатор серверного соединения в импульсном сообщении. Неудача приводит к тому, что
номер идентификатора серверного соединения не может быть использован заново. В этой си-
туации через некоторое время сервер может исчерпать приемлемые идентификаторы. Если
этот флаг не установлен, ядро удаляет серверное соединение автоматически, делая его иден-
тификатор приемлемым для повторного использования. Характеристики импульса:
Pulse code: _PULSE_CODE_DISCONNECT.
Pulse value: None.
_NTO_CHF_FIXED_PRIORITY – подавляет приоритетное наследование при получении
сообщений. Если флаг установлен, получающий поток не будет повышать свой приоритет до
приоритета потока, посылающего сообщение.
_NTO_CHF_REPLY_LEN – требует от ядра, чтобы длина ответного сообщения была ус-
тановлена в поле dstmsglen в структуре _msg_info (описание структуры см. далее). Это поле
приемлемо, если данный флаг был установлен при создании канала.
_NTO_CHF_SENDER_LEN – требует от ядра, чтобы длина клиентского сообщения была
установлена в поле srcmsglen структуры _msg_info. Это поле приемлемо, если данный флаг
был установлен при создании канала.
_NTO_CHF_THREAD_DEATH – ядро посылает импульс всякий раз, когда блокированный
на этом канале поток завершается. Только один канал серверного процесса может иметь этот
флаг установленным. Характеристики импульса:
Pulse code: _PULSE_CODE_THREADDEATH.
Pulse value: Thread ID – идентификатор потока (tid).
_NTO_CHF_UNBLOCK – ядро посылает импульс всякий раз, когда поток клиента пыта-
ется разблокироваться. Этот флаг скажет ядру: «Сообщи мне импульсом, когда клиент попро-
бует разблокироваться, но не позволяй ему этого делать! Я разблокирую его сам». Характери-
стики импульса:
Pulse code: _PULSE_CODE_UNBLOCK.
Pulse value: Receive ID (rcvid).
С каналом связаны 3 очереди (рис. 3.2):
очередь для потоков, ожидающих сообщение;
очередь для потоков, которые послали сообщения, но они еще не
приняты;
очередь для потоков, которые послали сообщения. Эти сообщения
приняты, но ответы еще не переданы.