Provided by: manpages-ru_4.19.0-7_all bug

ИМЯ

       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.

   Версии
       Before  Linux  2.6,  Linux  supported only unnamed, thread-shared semaphores.  On a system
       with Linux 2.6 and a glibc that provides the NPTL  threading  implementation,  a  complete
       implementation of POSIX semaphores is provided.

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

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

   Доступ к именованным семафорам через файловую систему
       В Linux, именованные семафоры создаются в виртуальной файловой системе, обычно монтируемой
       в /dev/shm, с именами вида sem.имя  (по  этой  причине  длина  имени  семафора  ограничена
       NAME_MAX-4, а не NAME_MAX символами).

       Начиная  с  Linux  2.6.19, для управления доступом к объектам конкретным пользователям или
       группам на файлы в этом каталоге могут быть применены ACL.

ЗАМЕЧАНИЯ

       Семафоры 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)

ПЕРЕВОД

       Русский   перевод   этой   страницы   руководства    был    сделан    Alexander    Golubev
       <fatzer2@gmail.com>,   Azamat   Hackimov  <azamat.hackimov@gmail.com>,  Hotellook,  Nikita
       <zxcvbnm3230@mail.ru>,       Spiros       Georgaras       <sng@hellug.gr>,       Vladislav
       <ivladislavefimov@gmail.com>,    Yuri    Kozlov   <yuray@komyakino.ru>   и   Иван   Павлов
       <pavia00@gmail.com>

       Этот  перевод  является  бесплатной  документацией;  прочитайте  Стандартную  общественную
       лицензию GNU версии 3 ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩ или более позднюю, чтобы
       узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ.

       Если вы обнаружите ошибки в переводе  этой  страницы  руководства,  пожалуйста,  отправьте
       электронное письмо на ⟨man-pages-ru-talks@lists.sourceforge.net⟩.