sem_init -
инициализирует
безымянный
семафор
POSIX threads library (
libpthread,
-lpthread)
#include <semaphore.h>
int sem_init(sem_t *sem, int pshared, unsigned int value);
Функция
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 это
исправлено:
при
успешном
выполнении
должен
возвращаться
ноль.
See
shm_open(3) and
sem_wait(3).
sem_destroy(3),
sem_post(3),
sem_wait(3),
sem_overview(7)
Русский
перевод
этой
страницы
руководства
был сделан
Alexander Golubev <
[email protected]>, Azamat Hackimov
<
[email protected]>, Hotellook, Nikita
<
[email protected]>, Spiros Georgaras <
[email protected]>, Vladislav
<
[email protected]>, Yuri Kozlov <
[email protected]>
и Иван
Павлов <
[email protected]>
Этот
перевод
является
бесплатной
документацией;
прочитайте
Стандартную
общественную
лицензию GNU
версии 3
или более
позднюю,
чтобы
узнать об
условиях
авторского
права. Мы не
несем
НИКАКОЙ
ОТВЕТСТВЕННОСТИ.
Если вы
обнаружите
ошибки в
переводе
этой
страницы
руководства,
пожалуйста,
отправьте
электронное
письмо на
[email protected]