另外参见

sem_destroy(3),sem_post(3),sem_wait(3),sem_overview(7)

名称

sem_init-初始化一个未命名的信号量

出版信息

这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/

SEM_INIT - Linux手册页

Linux程序员手册 第3部分
更新日期: 2020-08-13

错误说明

EINVAL
值超过SEM_VALUE_MAX。
ENOSYS
pshared为非零,但系统不支持进程共享的信号灯(请参见sem_overview(7))。

备注

奇怪的是,POSIX.1-2001没有指定成功调用sem_init()时应返回的值。 POSIX.1-2008对此进行了纠正,指定了成功的零回报。

说明

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设置为指示错误。

语法

#include <semaphore.h>

int sem_init(sem_t *sem, int pshared, unsigned int value);

与-pthread链接。

示例

请参见shm_open(3)和sem_wait(3)。

属性

有关本节中使用的术语的说明,请参见attribute(7)。

InterfaceAttributeValue
sem_init()Thread safetyMT-Safe

遵循规范

POSIX.1-2001。

日期:2019-08-20 18:01:15 来源:oir作者:oir