The website "dmilvdv.narod.ru." is not registered with uCoz.
If you are absolutely sure your website must be here,
please contact our Support Team.
If you were searching for something on the Internet and ended up here, try again:

About uCoz web-service

Community

Legal information

7.3.5 Семафоры POSIX

7.3.5 Семафоры POSIX

Предыдущая  Содержание  Следующая V*D*V

Семафоры являются счётчиками, совместно используемыми потоками или процессами ресурсов. Основными операциями с семафорами являются:

 

Атомарное увеличение счетчика.

Ожидание, пока счётчик не станет равен нулю, а затем его атомарное уменьшение.

 

Для межпроцессной или межпотоковой синхронизации также могут быть использованы двоичные семафоры. В основном они используются для синхронизации доступа к общим ресурсам, таким как общая память, глобальные структуры данных, и так далее. Есть два типа семафоров POSIX:

 

Именованные семафоры: они могут быть использованы для синхронизации между несколькими несвязанными процессами.

Безымянные семафоры: они могут быть использованы потоками внутри процесса или для синхронизации между связанными процессами (например, родительским и дочерним процессом).

 

Семафоры POSIX 1003.1b в Linux реализует библиотека pthread, которая является частью пакета glibc. Glibc 2.3 с NPTL имеет полную поддержку для семафоров, в том числе именованных и используемых разными процессами для доступа к общим ресурсам семафоров. Более ранние версии glibc поддерживали только безымянные семафоры. Операции с семафорами перечислены в Таблице 7.6. Использование именованного семафора иллюстрирует Распечатка 7.11.

 

Таблица 7.6 Функции для работы с семафорами POSIX.1b

 

Метод

Описание

sem_open

Открытие/создание именованного семафора.

sem_close

Закрытие именованного семафора.

sem_unlink

Удаление именованного семафора.

sem_init

Инициализация неименованного семафора.

sem_destroy

Удаление неименованного семафора.

sem_getvalue

Получение текущего значения счётчика семафора.

sem_wait

Выполнение операции блокировки семафора.

sem_trywait

Выполнение операции попытки блокировки семафора.

sem_post

Освобождение семафора.

 

Что следует помнить

 

Семафорная защита работает только между взаимодействующими процессами; то есть процесс должен ждать семафор, если он не доступен, и должен освободить семафор после использования.

Дескриптор семафора передаётся по наследству через ветвление. Дочерним процессам нет необходимости заново открывать семафор. После использования они могут вызвать sem_close.

Функция sem_post является безопасной для передачи асинхронных сигналов и может быть вызвана из обработчиков сигналов.

Может произойти инверсия приоритета, если процесс с низким приоритетом блокирует семафор, необходимый процессу с высоким приоритетом.

 

Предыдущая  Содержание  Следующая