
sem_init
sem_init函式是Posix信号量操作中的函式。sem_init() 初始化一个定位在 sem 的匿名信号量。value 参数指定信号量的初始值。 pshared 参数指明信号量是由进程内执行绪共享,还是由进程之间共享。如果 pshared 的值为 0,那幺信号量将被进程内的执行绪共享,并且应该放置在这个进程的所有执行绪都可见的地址上(如全局变数,或者堆上动态分配的变数)。
基本介绍
- 中文名:sem_init
- 头档案:#include<semaphore.h>
- 函式原型:unsigned int value);
- 返回值:int sem_init(sem
头档案
#include<semaphore.h>
函式原型
int sem_init(sem_t *sem, int pshared, unsigned int value);
说明
如果 pshared 是非零值,那幺信号量将在进程之间共享,并且应该定位共享记忆体区域(见 shm_open(3)、mmap(2) 和 shmget(2))。因为通过 fork(2) 创建的孩子继承其父亲的记忆体映射,因此它也可以见到这个信号量。所有可以访问共享记忆体区域的进程都可以用 sem_post(3)、sem_wait(3) 等等操作信号量。初始化一个已经初始的信号量其结果未定义。
参数
sem :指向信号量对象
pshared : 指明信号量的类型。不为0时此信号量在进程间共享,否则只能为当前进程的所有执行绪共享。
value : 指定信号量值的大小
pshared : 指明信号量的类型。不为0时此信号量在进程间共享,否则只能为当前进程的所有执行绪共享。
value : 指定信号量值的大小
返回值
sem_init() 成功时返回 0;错误时,返回 -1,并把 errno 设定为合适的值。
错误
EINVAL
value 超过 SEM_VALUE_MAX。
ENOSYS
pshared 非零,但系统还没有支持进程共享的信号量。