编程接口指南

初始化信号量集

semget(2) 可初始化信号量或获取其访问权限。 此调用成功时,会返回信号量 ID (semid)。 密钥参数是与信号量 ID 关联的值。nsems 参数指定信号量数组中的元素数。 如果 nsems 大于现有数组中的元素数,则此调用会失败。 如果不知道正确的计数,则为此参数提供 0 可确保此调用会成功。 semflg 参数指定初始访问权限和创建控制标志。

SEMMNI 系统配置选项可确定信号量数组的最大数目。 SEMMNS 选项可确定所有信号量集中的最大信号量数目。 由于信号量集之间存在分段,因此可能无法分配所有可用信号量。

以下代码说明了 semget(2)

#include			<sys/types.h>

#include			<sys/ipc.h>

#include			<sys/sem.h>

...

 	key_t		key;			/* key to pass to semget() */

 	int		semflg;			/* semflg to pass to semget() */

 	int		nsems;			/* nsems to pass to semget() */

 	int		semid;			/* return value from semget() */

		...

 	key = ...

 	nsems = ...

 	semflg = ...

 	...

 	if ((semid = semget(key, nsems, semflg)) == –1) {

 		perror("semget: semget failed");

 		exit(1);

 	} else

 		exit(0);

 ...