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

UptoLike

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

32
цедуры передачи сообщений. Базовый механизм передачи сообщений
обеспечивается системными вызовами, представленными в табл. 2.7.
Поток (клиент), который выполняет вызов MsgSend() передачи сооб-
щения ( рис. 2.7) к другому потоку, SEND-блокируется до тех пор, пока при-
нимающий поток (сервер) не выполнит вызов MsgReceive(), после чего пе-
редающий поток переходит в REPLY-блокированное состояние и ждет от-
вета или кода ошибки. Принимающий поток обработает сообщение и
сформирует ответ с помощью вызова MsgReply() или код ошибки с помо-
щью вызова MsgError(). Далее происходит деблокировка передающего по-
тока. Если принимающий поток выполняет вызов MsgReceive() до передачи
сообщения, то он RECEIVE-блокируется до тех пор, пока передающий поток
не выполнит вызов MsgSend().
2.12. Тайм-ауты ядра
Тайм-аут (timeout) – это системное средство, позволяющее ограничить
время пребывания потока в блокированном состоянии. Наиболее часто та-
кая потребность возникает при обмене сообщениями: клиент, посылая со-
общение серверу, не желает ждать ответа вечно. В этом случае удобно ис-
пользовать вызовы ядра, устанавливающие тайм-ауты на состояния блоки-
ровки. Тайм-аут также полезен в сочетании с функцией pthread_join: завер-
шения потока тоже не всегда хочется ждать. Ответственной за формирова-
ние тайм-аутов ядра является функция timer_timeout(), представленная в
следующем фрагменте.
#include <time.h>
extern int timer_timeout(
clockid_t id, // тип системных часов
int flags, // флаги, определяющие область действия тайм-аута
const struct sigevent* notify, // уведомление о событии
const struct timespec* ntime, // новое время тайм-аута
struct timespec* otime ); // старое время тайм-аута
Аргумент id указывает тип системных часов. Стандарт POSIX опреде-
ляет 3 типа системных часов:
CLOCK_REALTIME – подстраиваемые системные часы для нор-
мального режима работы процессора и режима работы при сниженном
энергопотреблении. Необходимость подстройки часов обычно возникает
при сетевых приложениях;
CLOCK_SOFTIME – подобны CLOCK_REALTIME при нормальном
режиме работы, не действуют в режиме сниженного энергопотребления;
CLOCK_MONOTONIC – эти часы всегда инкрементируются с посто-
янной скоростью и не могут быть подстроены.