7.3.5 Семафоры POSIX |
Предыдущая Содержание Следующая |
Семафоры являются счётчиками, совместно используемыми потоками или процессами ресурсов. Основными операциями с семафорами являются:
▪Атомарное увеличение счетчика. ▪Ожидание, пока счётчик не станет равен нулю, а затем его атомарное уменьшение.
Для межпроцессной или межпотоковой синхронизации также могут быть использованы двоичные семафоры. В основном они используются для синхронизации доступа к общим ресурсам, таким как общая память, глобальные структуры данных, и так далее. Есть два типа семафоров POSIX:
▪Именованные семафоры: они могут быть использованы для синхронизации между несколькими несвязанными процессами. ▪Безымянные семафоры: они могут быть использованы потоками внутри процесса или для синхронизации между связанными процессами (например, родительским и дочерним процессом).
Семафоры POSIX 1003.1b в Linux реализует библиотека pthread, которая является частью пакета glibc. Glibc 2.3 с NPTL имеет полную поддержку для семафоров, в том числе именованных и используемых разными процессами для доступа к общим ресурсам семафоров. Более ранние версии glibc поддерживали только безымянные семафоры. Операции с семафорами перечислены в Таблице 7.6. Использование именованного семафора иллюстрирует Распечатка 7.11.
Таблица 7.6 Функции для работы с семафорами POSIX.1b
Что следует помнить
▪Семафорная защита работает только между взаимодействующими процессами; то есть процесс должен ждать семафор, если он не доступен, и должен освободить семафор после использования. ▪Дескриптор семафора передаётся по наследству через ветвление. Дочерним процессам нет необходимости заново открывать семафор. После использования они могут вызвать sem_close. ▪Функция sem_post является безопасной для передачи асинхронных сигналов и может быть вызвана из обработчиков сигналов. ▪Может произойти инверсия приоритета, если процесс с низким приоритетом блокирует семафор, необходимый процессу с высоким приоритетом.
| ||||||||||||||||||||
Предыдущая Содержание Следующая |