SEM_INIT - Linux手册页
时间:2019-08-20 18:01:15 来源:igfitidea点击:
Linux程序员手册 第3部分
更新日期: 2020-08-13
名称
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
- 值超过SEM_VALUE_MAX。
- ENOSYS
- pshared为非零,但系统不支持进程共享的信号灯(请参见sem_overview(7))。
属性
有关本节中使用的术语的说明,请参见attribute(7)。
Interface | Attribute | Value |
sem_init() | Thread safety | MT-Safe |
遵循规范
POSIX.1-2001。
备注
奇怪的是,POSIX.1-2001没有指定成功调用sem_init()时应返回的值。 POSIX.1-2008对此进行了纠正,指定了成功的零回报。
另外参见
sem_destroy(3),sem_post(3),sem_wait(3),sem_overview(7)
出版信息
这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/。