semop
https://man7.org/linux/man-pages/man2/semop.2.html
函数简介:
- 名称:
semop, semtimedop - System V semaphore operations
- 所在库:Standard C library (libc, -lc)
- 形式:
每个在信号量集中的信号都有如下属性#include <sys/sem.h> int semop(int semid, struct sembuf *sops, size_t nsops);
理解信号量集(semaphore set):可以理解为一个semaphore 数组,而其中的每个semaphore都是一个结构如下的结构体:struct semaphore{ unsigned short semval; /* semaphore value 信号值 */ unsigned short semzcnt; /* # 等待零 */ unsigned short semncnt; /* # 等待增加 */ pid_t sempid; /* 上次修改信号量值的进程的 PID */ }
函数参数:
struct sembuf *sops
:
对 semid 指示的集合中的选定信号量执行操作。 参数struct sembuf *sops
指向的数组中的每个元素都是一个结构体,用于指定要在单个信号量上执行的操作。
理解“操作是一个结构体”:在以前,操作可能就由一个字符或者一个参数就能表达,例如数值运算的+-*/
,或者IPC_CREAT
参数,但是在这里,对于每个信号量进行的操作需要一个结构体的所有属性(三个)共同指定、共同完成。struct sembuf{ unsigned short sem_num; /* semaphore number */ short sem_op; /* semaphore operation */ short sem_flg; /* operation fla