8.1创建/打开信号量集合
8.1.1 函数名
semget
8.1.2 函数原形
int semget(key_t key,int nsems, int semflg)
8.1.3 函数功能
1.获取信号量集合标识符
2.当key所指定的信号量不存在的时候,并且semflg里面包含了IPC_CREAT,这个时候,就会创建一个信号量集合
8.1.4 所属头文件
<sys/types.h> <sys/ipc.h><sys/sem.h>
8.1.5 返回值
成功:返回信号量集合标识符 失败:返回-1
8.1.6 参数说明
key:键值
semflg:标志,可以取IPC_CREAT,来创建一个信号量
nsems:创建的这个信号量集合里面包含的信号量数目
8.1.7 键值介绍
1.键值key是标明信号量的,利用这个键值可以找到信号量,即使不打开信号量,该信号量也存在键值;
2.和文件类似,每个文件都有一个文件名,每个进程要打开文件的时候,需要知道该文件名,然后利用该文件名打开文件。
3.标识符和文件Id(fd)都是在打开文件后才会产生
8.2操作信号量(获取信号量)
8.2.1 函数名
semop
8.2.2 函数原形
int semop(int semid,struct sembuf *sops,unsigned nsops)
8.2.3 函数功能
操作信号量集合里面的信号量
8.2.4 所属头文件
<sys/types.h> <sys/ipc.h><sys/sem.h>
8.2.5 返回值
成功:返回0 失败:-1
8.2.6 参数说明
semid:要操作的信号量的标识符
nsops:要操作多少个信号量
sops:对信号量执行什么样的操作,结构体如下:
sem_num:信号量编号,0:操作第一个信号量;1:操作第2个信号量
sem_op:信号量操作符 (正数(1)表示加1,释放该信号量,负数(-1)表示减1,获取该信号量), 这样获取进程的值为0;在程序前面必须用semcnl()函数设置信号量初始值semval为1,否则如果信号量初始值semval还可能为2、3等等,那么就不能按要求释放和获取信号量了。
sem_flg:信号量操作标志
8.2.7公示栏问题程序化
2.利用信号量控制公示板
8.2.8信号同步编程
生产者消费者问题