Шрифт:
Существует особое значение ключа семафора
IPC_PRIVATE
, которое предназначено для создания семафора, доступ к которому получает только процесс-создатель, но такой семафор редко бывает полезен. Для создания нового семафора следует задавать уникальное ненулевое целое число. Параметр
num_sems
определяет количество требуемых семафоров. Почти всегда он равен 1. Параметр
sem_flags
— набор флагов, очень похожих на флаги функции open. Младшие девять байтов — права доступа к семафору, ведущие себя, как права доступа к файлу. Кроме того, для создания нового семафора с помощью поразрядной операции OR
их можно объединить со значением IPC_CREAT
. Не считается ошибкой наличие флага IPC_CREAT
и задание ключа существующего семафора. Флаг IPC_CREAT
безмолвно игнорируется, если в нем нет нужды. Можно применять флаги IPC_CREAT
и IPC_EXCL
для гарантированного получения нового уникального семафора. Если семафор уже существует, функция вернет ошибку. Функция
semget
вернет в случае успеха положительное (ненулевое) значение, представляющее собой идентификатор, применяемый остальными функциями семафора. В случае ошибки возвращается -1. semop
Функция semop применяется для изменения значения семафора.
int semop(int sem_id, struct sembuf *sem_ops, size_t num_sem_ops);
Первый параметр
sem_id
— идентификатор семафора, возвращенный функцией semget
. Второй параметр sem_ops
— указатель на массив структур, у каждой из которых есть, по крайней мере, следующие элементы:
struct sembuf {
short sem_num;
short sem_op;
short sem_flg;
}
Первый параметр
sem_num
— номер семафора, обычно 0, если вы не работаете с массивом семафоров. Элемент sem_op
— значение, на которое должен изменяться семафор. (Вы можете увеличивать и уменьшать семафор на значения, не равные 1.) Как правило, применяются только два значения: -1 для операции P
, заставляющей ждать, пока семафор не станет доступен, и +1 для операции V
, оповещающей о том, что в данный момент семафор доступен. Последний элемент
sem_flg
обычно задается равным SEM_UNDO
. Это значение заставляет операционную систему отслеживать изменения значения семафора, сделанные текущим процессом, и, если процесс завершается, не освободив семафор, позволяет операционной системе автоматически освободить семафор, если он удерживался этим процессом. Хорошо взять за правило установку sem_flg
, равным SEM_UNDO
, если вам не требуется иного поведения. Если же вы все-таки решили, что вам нужно значение, отличное от SEM_UNDO
, очень важно быть последовательным, иначе вы можете оказаться в замешательстве относительно попыток ядра системы "убрать" ваши семафоры, когда ваш процесс завершается. Все действия, предусмотренные
semop
, собраны вместе, чтобы избежать состояния гонок, вызванного использованием множественных семафоров. Все подробности функционирования semop
можно найти на страницах интерактивного справочного руководства. semctl
Функция
semctl
позволяет напрямую управлять данными семафора.
int semctl (int sem_id, int sem_num, int command, ...);
Первый параметр sem_id — идентификатор семафора, полученный от функции
semget
. Параметр sem_num
— номер семафора. Он применяется при работе с массивом семафоров. Обычно этот параметр равен 0, первый и единственный семафор. Параметр command
— предпринимаемое действие, и четвертый параметр, если присутствует, — union
(объединение) типа semun
, которое в соответствии со стандартом X/Open должно содержать как минимум следующие элементы:
union semun {
int val;
struct semid_ds *buf;
unsigned short *array;
}
В большинстве версий ОС Linux определение объединения
semun
включено в заголовочный файл (обычно sem.h), несмотря на то, что стандарт X/Open настаивает на том, что вы должны привести собственное объявление. Если вы поймете, что должны объявить его самостоятельно, проверьте, нет ли объявления этого объединения на страницах интерактивного справочного руководства, относящихся к функции semctl
. Если вы найдете его, мы полагаем, что вы примените определение из вашего справочного руководства, даже если оно отличается от приведенного на страницах этой книги. Существует множество разных значений параметра command, допустимых в функции
semctl
. Обычно применяются два из них, которые описаны далее. Более подробную информацию о функции semctl
см. в интерактивном справочном руководстве. Два часто используемых значения
command
таковы:
SETVAL
— применяется для инициализации семафора с заданным значением. Это значение передается как элемент val
объединения semun
. Такое действие необходимо для того, чтобы увеличить значение семафора перед первым его применением;
Жанры
- Романы
- Приключения
- Детективы
- Техно триллер
- Дамский детективный роман
- Исторические детективы
- Классические детективы
- Шпионские детективы
- Триллеры
- Юридический триллер
- Крутой детектив
- Полицейские детективы
- Медицинский триллер
- Иронические детективы
- Боевики
- Криминальные детективы
- Политические детективы
- Маньяки
- Зарубежные детективы
- Прочие Детективы
- Спецслужбы
- Драматургия
- Фантастика
- Хентай
- Ранобэ
- Сянься
- Дорама
- Уся
- Аниме
- Космоопера
- Юмористическая фантастика
- Боевая фантастика
- Героическая фантастика
- Технофэнтези
- Готический роман
- Социально-философская фантастика
- Попаданцы
- Историческая фантастика
- Ироническая фантастика
- Зарубежная фантастика
- Историческое фэнтези
- Юмористическое фэнтези
- Детективная фантастика
- Эпическая фантастика
- Мистика
- Космическая фантастика
- Фантастика: прочее
- Постапокалипсис
- Научная фантастика
- Киберпанк
- Альтернативная история
- Ненаучная фантастика
- РПГ
- Стимпанк
- Ироническое фэнтези
- Ужасы и мистика
- Сказочная фантастика
- Фэнтези
- Городское фэнтези
- Эзотерика
- Проза
- Военная проза
- Легкая проза
- Сентиментальная проза
- Советская классическая проза
- Антисоветская литература
- Афоризмы
- Эпистолярная проза
- Новелла
- Семейный роман
- Рассказ
- Классическая проза
- Эпопея
- Эссе
- Проза прочее
- Повесть
- Магический реализм
- Современная проза
- Контркультура
- Роман
- Историческая проза
- Русская классическая проза
- Феерия
- Стихи и поэзия
- Юмор
- Дом и досуг
- Рыбалка
- Охота
- Здоровье детей
- Домашние животные
- Воспитание детей
- Отдых / туризм
- Зарубежная прикладная литература
- Прочее домоводство
- Прикладная литература
- Домашнее хозяйство
- Кулинария
- Медицина и здоровье
- Сделай сам
- Спорт
- Хобби и ремесла
- Образовательная литература
- Сад и Огород
- Здоровье и красота
- Развлечения
- Коллекционирование
- Секс / секс-руководства
- Образование и наука
- Боевые искусства
- Органическая химия
- Обществознание
- Военная история
- Ветеринария
- Ораторское искусство / риторика
- Физика
- Химия
- Семейная психология
- Военная техника и вооружение
- Иностранные языки
- Прочая научная литература
- Психотерапия и консультирование
- Биохимия
- Cпецслужбы
- Астрономия и Космос
- Школьные учебники
- Учебная и научная литература
- Учебники
- Государство и право
- Психология
- Литературоведение
- История
- Научно-популярная литература
- Политика
- Детская психология
- Юриспруденция
- Шпаргалки
- Педагогика
- Физическая химия
- Медицина
- Биофизика
- Языкознание
- Зарубежная образовательная литература
- Зоология
- Геология и география
- Краткое содержание
- Зарубежная психология
- Саморазвитие / личностный рост
- Технические науки
- Религиоведение
- Военное дело
- Личная эффективность
- Аналитическая химия
- Рефераты
- Экология
- Философия
- Альтернативная медицина
- Математика
- Культурология
- Военное дело: прочее
- Ботаника
- Биология
- Словари и Энциклопедии
- Финансы и бизнес
- Отраслевые издания
- Бухучет и аудит
- Недвижимость
- Деловая литература
- Ценные бумаги
- Внешнеэкономическая деятельность
- Торговля
- Зарубежная деловая литература
- О бизнесе популярно
- Стартапы и создание бизнеса
- Корпоративная культура
- Управление, подбор персонала
- Маркетинг, PR, реклама
- Личные финансы
- Работа с клиентами
- Менеджмент
- Интернет-бизнес
- Поиск работы, карьера
- Малый бизнес
- Делопроизводство
- Государственное и муниципальное управление
- Банковское дело
- Экономика
- Книги по IT
- Техника
- Древние книги
- Документальное
- Прочее
- Интерьеры
- Газеты и журналы
- Театр
- Музыка
- Комиксы / манга
- Зарубежная классика
- Современная зарубежная литература
- Изобразительное искусство, фотография
- Мода и стиль
- Искусство и Дизайн
- Зарубежная литература о культуре и искусстве
- Фанфик
- Подростковая литература
- Шахматы
- Кино
- Культура и искусство
- Недописанное
- Классическая литература
- Без Жанра
- Народные
- Книги Для Детей
- Детские остросюжетные
- Сказки
- Детские стихи
- Прочая детская литература
- Детская образовательная литература
- Книги для дошкольников
- Детская фантастика
- Детские детективы
- Книга-игра
- Детский фольклор
- Буквари
- Детская проза
- Детская познавательная и развивающая литература
- Внеклассное чтение
- Зарубежные детские книги
- Детские приключения
Сейчас Читают
Страж Кодекса. Книга II
Романов Илья Николаевич
Крещение огнем
Сапковский Анджей
Мастер 4
Чащин Валерий
Двойня для босса. Стерильные чувства
Лесневская Вероника
Часовое имя
Щерба Наталья Васильевна
Невеста
Вудворт Франциска
Аномальный наследник. Пенталогия
Тарс Элиан
Измена. Наследник для дракона
Солт Елена
Золушка вне правил
Шах Ольга
Инвестиго, из медика в маги
Рэд Илья