Linux repositories inspector

sem_init(3) - Russkiy

Linux
2017-09-15

man-pages-ru

Russian man pages from the Linux Documentation Project

manpages-dev

Manual pages about using GNU/Linux for development

man-pages

Linux kernel and C library user-space interface documentation

ИМЯ

sem_init - инициализирует безымянный семафор

ОБЗОР

#include <semaphore.h>

int sem_init(sem_t *sem, int pshared, unsigned int value);
Компонуется при указании параметра -pthread.

ОПИСАНИЕ

Функция sem_init() инициализирует безымянный семафор по адресу, указанному в sem. В аргументе value задаётся начальное значение семафора.
Аргументом pshared определяется, будет ли данный семафор доступен в нитях процесса или в разных процессах.
Если значение pshared равно 0, то семафор будет коллективно использоваться в нитях процесса, и должен располагаться по адресу, который доступен из всех нитей (например, глобальная переменная или динамически выделенная из кучи переменная).
Если значение pshared не равно нулю, то семафор будет коллективно использоваться несколькими процессами, и должен располагаться в области общей памяти (смотрите shm_open(3), mmap(2) и shmget(2)) (так как потомок, создаваемый fork(2), наследует отображение памяти родителя, то ему также доступен и семафор). Любой процесс, имеющий доступ к области общей памяти, может обращаться к семафору с помощью sem_post(3), sem_wait(3) и т. п. функций.
Инициализация семафора, который уже был инициализирован, приводит к непредсказуемым результатам.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

При успешном выполнении sem_init() возвращается 0; при ошибке возвращается -1, а в errno содержится код ошибки.

ОШИБКИ

EINVAL Значение value превышает SEM_VALUE_MAX.
ENOSYS Значение pshared не равно нулю, то система не поддерживает семафоры, коллективно используемые процессами (смотрите sem_overview(7)).

АТРИБУТЫ

Описание терминов данного раздела смотрите в attributes(7).
Интерфейс Атрибут Значение
sem_init() Безвредность в нитях MT-Safe

СООТВЕТСТВИЕ СТАНДАРТАМ

POSIX.1-2001.

ЗАМЕЧАНИЯ

Странно, но в POSIX.1-2001 не определено значение, которое должно возвращаться при успешном выполнении вызова sem_init(). В POSIX.1-2008 это исправлено: при успешном выполнении должен возвращаться ноль.
⇧ Top