Главная » 2017 » Ноябрь » 18 » man 7 sem_overview
21:32
man 7 sem_overview

SEO sprint - Всё для максимальной раскрутки!





ИМЯ


sem_overview - обзор семафоров POSIX



ОПИСАНИЕ


Семафоры POSIX позволяют процессам и нитям синхронизировать свою работу.

Семафор представляет собой целое число, значение которого никогда не будет меньше
нуля. Над семафорами выполняются две операции: увеличение значения семафора на
единицу (sem_post(3)) и уменьшение значения семафора на единицу (sem_wait(3)).
Если значение семафора равно нулю, то операция sem_wait(3) блокирует работу до тех
пор, пока значение не станет больше нуля.

Есть два вида семафоров POSIX: именованные семафоры и безымянные семафоры.

Именованные семафоры
Именованные семафоры отличают по именам вида /имя — строка (с null в конце)
до NAME_MAX-4 (т. е., 251) символов, состоящая из начальной косой черты и
одного или нескольких символов (символ косой черты не допускается). Два
процесса могут работать с одним семафором указав его имя в sem_open(3).

Функция sem_open(3) создаёт новый именованный семафор или открывает
существующий. После открытия семафора с ним можно работать посредством
sem_post(3) и sem_wait(3). Когда процесс закончил использовать семафор, его
можно закрыть с помощью sem_close(3). Когда все процессы закончили
использовать семафор, его можно удалить из системы с помощью sem_unlink(3).

Безымянные семафоры (семафоры в памяти)
Безымянные семафоры не имеют имени. Семафор размещается в области памяти,
которая доступна нескольким нитям (общий семафор для нитей) или процессам
(общий семафор для процессов). Общий семафор для нитей размещается в
области памяти, которая доступна из нитей процесса, например в глобальной
переменной. Общий семафор для процессов должен размещаться в области общей
памяти (например, в сегменте общей памяти System V, созданной с помощью
shmget(2), или в объекте общей памяти POSIX, созданном с помощью
shm_open(3)).

Перед началом использования безымянный семафор должны быть
проинициализирован с помощью sem_init(3). После этого с ним можно работать
через sem_post(3) и sem_wait(3). Если семафор больше не нужен, то семафор
нужно уничтожить с помощью sem_destroy(3) (но до освобождения выделенной
для него памяти).

Далее в разделе описываются особенности реализации семафоров POSIX в Linux.

Версии
До ядра версии 2.6, в Linux поддерживались только безымянные общие семафоры для
нитей. В системах с Linux 2.6 и glibc, предоставляющей реализацию нитей NPTL,
имеется полная реализация семафоров POSIX.

Устойчивость
Именованные семафоры POSIX располагаются в ядре. Пока семафор не удалён с помощью
sem_unlink(3), он остаётся в системе до её выключения.

Компоновка
Программы, в которых используется программный интерфейс семафоров POSIX, для
компоновки с библиотекой реального времени librt должны компилироваться с помощью
cc -pthread.



ЗАМЕЧАНИЯ


Семафоры System V (semget(2), semop(2) и т. п.) — это старый программный интерфейс
семафоров. Семафоры POSIX предоставляют более простой и продуманный интерфейс чем
семафоры System V; с другой стороны, семафоры POSIX не так широко распространены
(особенно в старых системах), по сравнению с семафорами System V.



ПРИМЕР


Пример использования функций семафоров POSIX показан в sem_wait(3).



СМОТРИТЕ ТАКЖЕ


sem_close(3), sem_destroy(3), sem_getvalue(3), sem_init(3), sem_open(3),
sem_post(3), sem_unlink(3), sem_wait(3), pthreads(7), shm_overview(7)



Категория: (7) Различные описания, соглашения и прочее | Просмотров: 150 | Добавил: Администратор | Рейтинг: 0.0/0
Всего комментариев: 0
avatar