SEM_OVERVIEW(7) | Руководство программиста Linux | SEM_OVERVIEW(7) |
sem_overview - обзор семафоров POSIX
Семафоры POSIX позволяют процессам и нитям синхронизировать свою работу.
Семафор представляет собой целое число, значение которого никогда не будет меньше нуля. Над семафорами выполняются две операции: увеличение значения семафора на единицу (sem_post(3)) и уменьшение значения семафора на единицу (sem_wait(3)). Если значение семафора равно нулю, то операция sem_wait(3) блокирует работу до тех пор, пока значение не станет больше нуля.
Есть два вида семафоров POSIX: именованные семафоры и безымянные семафоры.
Далее в разделе описываются особенности реализации семафоров POSIX в Linux.
До ядра версии 2.6, в Linux поддерживались только безымянные общие семафоры для нитей. В системах с Linux 2.6 и glibc, предоставляющей реализацию нитей NPTL, имеется полная реализация семафоров POSIX.
Именованные семафоры 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)
2017-05-03 | Linux |