使用 sem_init(3RT) 可以将 sem 所指示的未命名信号变量初始化为 value。
int sem_init(sem_t *sem, int pshared, unsigned int value);
#include <semaphore.h> sem_t sem; int pshared; int ret; int value; /* initialize a private semaphore */ pshared = 0; value = 1; ret = sem_init(&sem, pshared, value);
如果 pshared 的值为零,则不能在进程之间共享信号。如果 pshared 的值不为零,则可以在进程之间共享信号。对于 Solaris 线程,请参见sema_init 语法。
多个线程决不能初始化同一个信号。
不得对其他线程正在使用的信号重新初始化。
pshared 为 0 时,信号只能由该进程内的所有线程使用。
#include <semaphore.h> sem_t sem; int ret; int count = 4; /* to be used within this process only */ ret = sem_init(&sem, 0, count);
#include <semaphore.h> sem_t sem; int ret; int count = 4; /* to be shared among processes */ ret = sem_init(&sem, 1, count);
sem_init() 在成功完成之后会返回零。其他任何返回值都表示出现了错误。如果出现以下任一情况,该函数将失败并返回对应的值。
EINVAL
描述:参数值超过了 SEM_VALUE_MAX。
ENOSPC
描述:初始化信号所需的资源已经用完。到达信号的 SEM_NSEMS_MAX 限制。
ENOSYS
描述:系统不支持 sem_init() 函数。
EPERM
描述:进程缺少初始化信号所需的适当权限。