Provided by: manpages-ru_4.27.0-1_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> и Kirill Rekhov <krekhov.dev@gmail.com>

       Этот перевод является свободной программной документацией; он распространяется на условиях  общедоступной
       лицензии  GNU  (GNU  General Public License - GPL, https://www.gnu.org/licenses/gpl-3.0.html версии 3 или
       более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ.

       Если вы обнаружите какие-либо ошибки в переводе этой страницы руководства, пожалуйста, сообщите  об  этом
       разработчику(ам)   по   его(их)  адресу(ам)  электронной  почты  или  по  адресу  списка рассылки русских
       переводчиков.

Справочные страницы Linux 6.9.1                   2 мая 2024 г.                                  sem_overview(7)