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

UptoLike

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

60
Таблица 4.1
Функция Описание
sem_close() Закрыть именованный семафор
sem_getvalue() Получить значение семафора
sem_open() Создать или получить доступ к именованному семафору
sem_post() Увеличить значение счетчика
sem_trywait() Проверить семафор без блокировки
sem_unlink() Уничтожить именованный семафор
sem_wait() Уменьшить значение счетчика семафора
Синтаксис некоторых функций представлен в следующем фрагменте.
sem_t * sem_open( const char * sem_name, // имя семафора
int oflags, // флаги семафора
... );
Функция возвращает дескриптор семафора, который далее используется во всех вызо-
вах.
Аргументы:
sem_name – имя семафора, это последовательность символов, разделенная слешами
(/). Если имя имеет ведущий слеш, то оно регистрируется как имя файла в директории
/dev/sem. Все другие имена регистрируются в текущем директории процесса, создавшего се-
мафор;
oflags – флаги семафора, используются при его создании и могут иметь только значе-
ния O_CREAT и O_EXCL. Назначение данных флагов и их использование точно такое же, как и
для очереди сообщений.
Если установлен флаг O_CREAT, означающий создание нового семафора, то вызов до-
полняется еще двумя аргументами:
mode_t mode – режим доступа к семафору, соответствует режиму доступа для очере-
дей сообщений ( см. табл. 3.13). Для нормального функционирования следует установить дос-
туп по чтению, записи и исполнению, например следующим образом:
- S_IRWXG для доступа членов группы,
- S_IRWXO для прочих,
- S_IRWXU для собственника;
unsigned int value – это начальное значение счетчика семафора. При функционирова-
нии семафора положительное значение счетчика (т. е. значение больше нуля) указывает на
неблокированный семафор, а значение нуль и меньше нуляна блокированный. Начальное
значение счетчика не должно превышать константу SEM_VALUE_MAX, устанавливаемую при
запуске менеджера.
int sem_init( sem_t * sem, // дескриптор семафора
int pshared, // признак разделения в памяти
unsigned value ); // значение счетчика
Вызов используется для динамической инициализации семафора. Нулевое значение
признака pshared указывает, что семафор будет использоваться процессами через механизм
разделяемой памяти. Это приемлемо только в пределах одного узла. Функция возвращает
нуль при удачном завершении и –1 при ошибке.
Остальные функции полностью подобны функциям обычного семафора.