| sem_overview(7) | Miscellaneous Information Manual | sem_overview(7) |
sem_overview - обзор семафоров POSIX
Семафоры POSIX позволяют процессам и нитям синхронизировать свою работу.
Семафор представляет собой целое число, значение которого никогда не будет меньше нуля. Над семафорами выполняются две операции: увеличение значения семафора на единицу (sem_post(3)) и уменьшение значения семафора на единицу (sem_wait(3)). Если значение семафора равно нулю, то операция sem_wait(3) блокирует работу до тех пор, пока значение не станет больше нуля.
Есть два вида семафоров POSIX: именованные семафоры и безымянные семафоры.
Далее в разделе описываются особенности реализации семафоров 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 или более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ.
Если вы обнаружите какие-либо ошибки в переводе этой страницы руководства, пожалуйста, сообщите об этом разработчику(ам) по его(их) адресу(ам) электронной почты или по адресу списка рассылки русских переводчиков.
| 2 мая 2024 г. | Справочные страницы Linux 6.9.1 |