有名信号量:
1.创建
semget
int semget(key_t key, int nsems, int semflg);
功能:
创建一组信号量
参数:
key:IPC对象名
nsems:信号量的个数
semflg:IPC_CREAT
返回值:
成功返回信号量ID
失败返回-1
2.销毁
semctl
int semctl(int semid, int semnum, int cmd, ...);
功能:
向信号灯发送命令
参数:
semid:信号灯ID号
semnum:具体操作信号量的编号
cmd:
IPC_RMID 删除信号灯
SETVAL 设置信号量的值
返回值:
成功返回0
失败返回-1
初始化:
union semun {
int val; /* Value for SETVAL */
struct semid_ds *buf; /* Buffer for IPC_STAT, IPC_SET */
unsigned short *array; /* Array for GETALL, SETALL */
struct seminfo *__buf; /* Buffer for IPC_INFO
(Linux-specific) */
};
3.申请信号量
4.释放信号量
semop
int semop(int semid, struct sembuf *sops, size_t nsops);
功能:
对信号量完成操作
参数:
semid:信号灯的ID号
sops:信号量操作的数组首地址
nsops:数组元素个数
返回值:
成功返回0
失败返回-1
unsigned short sem_num; /* semaphore number */ 操作信号量的下标
short sem_op; /* semaphore operation */ 具体对信号量的操作(申请:-1 释放:+1)
short sem_flg; /* operation flags */ SEM_UNDO