.\" -*- coding: UTF-8 -*-
.\" Copyright (C) 2006 Michael Kerrisk <mtk.manpages@gmail.com>
.\"
.\" SPDX-License-Identifier: Linux-man-pages-copyleft
.\"
.\"*******************************************************************
.\"
.\" This file was generated with po4a. Translate the source file.
.\"
.\"*******************************************************************
.TH sem_overview 7 "4 декабря 2022 г." "Справочные страницы Linux 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 <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>
.
.PP
Этот перевод является свободной программной документацией; он распространяется
на условиях общедоступной лицензии GNU (GNU General Public License - GPL,
.UR https://www.gnu.org/licenses/gpl-3.0.html
.UE
версии 3 или более поздней) в отношении
авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ.
.PP
Если вы обнаружите какие-либо ошибки в переводе этой страницы руководства, пожалуйста,
сообщите об этом разработчику(ам) по его(их) адресу(ам) электронной почты или по адресу
.MT <debian-l10n-russian@lists.debian.org>
списка рассылки русских переводчиков
.ME .