SysV 信号量集 : 一个信号量数组; 命令 ipcs - s 查看
//这个联合体 有些linux系统中没定义. 其实可用可不用
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) */
};
semget : 创建或获取一个信号量集 . 第2个参数, 指定N个信号量;
semop: 修改一个或一批信号量. 相当于 posix 中的 sem_wait 和 sem_post 综合体
每个信号量由struct sembuf 控制.
sem_num 表示第N个信号量.
sem_op 可以是 > 0 , 0 , <0 , 相当于 sem_post == 1, sem_wait == -1;
sem_flg : IPC_NOWAIT 不阻塞, SEM_U

本文介绍了SystemV信号量集的使用,包括如何查看信号量、创建及获取信号量集、通过semop进行修改,以及struct sembuf结构的作用。重点讨论了SEM_UNDO标志,它确保即使进程异常退出也能还原信号量的操作值,适用于防止异常情况。但不推荐在生产者/消费者问题中使用此功能。
最低0.47元/天 解锁文章
1040

被折叠的 条评论
为什么被折叠?



