.\" -*- coding: UTF-8 -*- .\" Copyright (C) 2006 Michael Kerrisk .\" .\" SPDX-License-Identifier: Linux-man-pages-copyleft .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH sem_overview 7 "4 декабря 2022 г." "Linux man\-pages 6.03" .SH ИМЯ sem_overview \- обзор семафоров POSIX .SH ОПИСАНИЕ Семафоры POSIX позволяют процессам и нитям синхронизировать свою работу. .PP Семафор представляет собой целое число, значение которого никогда не будет меньше нуля. Над семафорами выполняются две операции: увеличение значения семафора на единицу (\fBsem_post\fP(3)) и уменьшение значения семафора на единицу (\fBsem_wait\fP(3)). Если значение семафора равно нулю, то операция \fBsem_wait\fP(3) блокирует работу до тех пор, пока значение не станет больше нуля. .PP Есть два вида семафоров POSIX: именованные семафоры и безымянные семафоры. .TP \fBИменованные семафоры\fP .\" glibc allows the initial slash to be omitted, and makes .\" multiple initial slashes equivalent to a single slash. .\" This differs from the implementation of POSIX message queues. .\" glibc allows subdirectory components in the name, in which .\" case the subdirectory tree must exist under /dev/shm, and .\" the fist subdirectory component must exist as the name .\" sem.name, and all of the subdirectory components must allow the .\" required permissions if a user wants to create a semaphore .\" object in a subdirectory. Именованные семафоры отличают по именам вида \fI/имя\fP — строка (с null в конце) до \fBNAME_MAX\fP\fI\-4\fP (т. е., 251) символов, состоящая из начальной косой черты и одного или нескольких символов (символ косой черты не допускается). Два процесса могут работать с одним семафором указав его имя в \fBsem_open\fP(3). .IP Функция \fBsem_open\fP(3) создаёт новый именованный семафор или открывает существующий. После открытия семафора с ним можно работать посредством \fBsem_post\fP(3) и \fBsem_wait\fP(3). Когда процесс закончил использовать семафор, его можно закрыть с помощью \fBsem_close\fP(3). Когда все процессы закончили использовать семафор, его можно удалить из системы с помощью \fBsem_unlink\fP(3). .TP \fBБезымянные семафоры (семафоры в памяти)\fP Безымянные семафоры не имеют имени. Семафор размещается в области памяти, которая доступна нескольким нитям (\fIобщий семафор для нитей)\fP или процессам (\fIобщий семафор для процессов\fP). Общий семафор для нитей размещается в области памяти, которая доступна из нитей процесса, например в глобальной переменной. Общий семафор для процессов должен размещаться в области общей памяти (например, в сегменте общей памяти System V, созданной с помощью \fBshmget\fP(2), или в объекте общей памяти POSIX, созданном с помощью \fBshm_open\fP(3)). .IP Перед началом использования безымянный семафор должны быть проинициализирован с помощью \fBsem_init\fP(3). После этого с ним можно работать через \fBsem_post\fP(3) и \fBsem_wait\fP(3). Если семафор больше не нужен, то семафор нужно уничтожить с помощью \fBsem_destroy\fP(3) (но до освобождения выделенной для него памяти). .PP Далее в разделе описываются особенности реализации семафоров POSIX в Linux. .SS Версии 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. .SS Устойчивость Именованные семафоры POSIX располагаются в ядре. Пока семафор не удалён с помощью \fBsem_unlink\fP(3), он остаётся в системе до её выключения. .SS Компоновка Программы, в которых используется программный интерфейс семафоров POSIX, для компоновки с библиотекой реального времени \fIlibrt\fP должны компилироваться с помощью \fIcc \-pthread\fP. .SS "Доступ к именованным семафорам через файловую систему" В Linux, именованные семафоры создаются в виртуальной файловой системе, обычно монтируемой в \fI/dev/shm\fP, с именами вида \fBsem.\fP\fIимя\fP (по этой причине длина имени семафора ограничена \fBNAME_MAX\fP\fI\-4\fP, а не \fBNAME_MAX\fP символами). .PP Начиная с Linux 2.6.19, для управления доступом к объектам конкретным пользователям или группам на файлы в этом каталоге могут быть применены ACL. .SH ЗАМЕЧАНИЯ Семафоры System V (\fBsemget\fP(2), \fBsemop\fP(2) и т. п.) — это старый программный интерфейс семафоров. Семафоры POSIX предоставляют более простой и продуманный интерфейс чем семафоры System V; с другой стороны, семафоры POSIX не так широко распространены (особенно в старых системах), по сравнению с семафорами System V. .SH ПРИМЕРЫ Пример использования функций семафоров POSIX показан в \fBsem_wait\fP(3). .SH "СМ. ТАКЖЕ" \fBsem_close\fP(3), \fBsem_destroy\fP(3), \fBsem_getvalue\fP(3), \fBsem_init\fP(3), \fBsem_open\fP(3), \fBsem_post\fP(3), \fBsem_unlink\fP(3), \fBsem_wait\fP(3), \fBpthreads\fP(7), \fBshm_overview\fP(7) .PP .SH ПЕРЕВОД Русский перевод этой страницы руководства был сделан Alexander Golubev , Azamat Hackimov , Hotellook, Nikita , Spiros Georgaras , Vladislav , Yuri Kozlov и Иван Павлов . .PP Этот перевод является бесплатной документацией; прочитайте .UR https://www.gnu.org/licenses/gpl-3.0.html Стандартную общественную лицензию GNU версии 3 .UE или более позднюю, чтобы узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ. .PP Если вы обнаружите ошибки в переводе этой страницы руководства, пожалуйста, отправьте электронное письмо на .MT man-pages-ru-talks@lists.sourceforge.net .ME .