Инициализация безымянного семафора
#include <semaphore.h>int sem_init( sem_t *sem,int pshared,unsigned value );
sem_t
, который необходимо инициализировать.0
соответствует заблокированому семафору, положительное значение разблокированному. Значение не должно превышать SEM_VALUE_MAX
.libc
Функция sem_init() инициализирует безымянный семафор, на который ссылается аргумент sem. Начальное значение счетчика семафора задается аргументом value.
Следует выделять объекты синхронизации только при обычном мапировании памяти. На некоторых платформах (например, PowerPC), атомарные операции, такие как вызовы pthread_mutex_lock(), могут вызвать ошибку, если структура семафора будет выделена в некэшированной памяти. |
Вы можете использовать инициализированный семафор в последующих вызовах sem_wait(), sem_trywait(), sem_post() и sem_destroy(). Инициализированный семафор функционален до тех пор, пока он не будет уничтожен функцией sem_destroy() или пока память, в которой находится семафор, не будет освобождена. Если аргумент pshared ненулевой, то семафор может быть разделен между процессами через общую память. В этом случае любой процесс может использовать sem с помощью функций sem_wait(), sem_trywait(), sem_post() и sem_destroy().
Не смешивайте операции ( sem_open() и sem_close()) совместно с операциями (sem_init() и sem_destroy()) над одним и тем же семафором. |
SEM_VALUE_MAX
. POSIX 1003.1 Semaphores
Не инициализируйте один и тот же семафор более чем из одного потока. Лучше настроить семафоры до запуск какого-либо потока.
errno, sem_destroy(), sem_post(), sem_trywait(), sem_wait()
Предыдущий раздел: Описание API системной библиотеки