信号量互斥编程
信号量互斥
一。公示栏问题
1.问题描述
2.问题程序化
3.信号量概念
(1)信号量分类
二值信号灯:信号灯的值只能是取0或1
计数信号灯:信号灯的值可以取任意非负值
二。函数学习
1.创建/打开信号量
函数名 semget
函数原型 int semget (key_t key ,int nsems,int semflg)
函数功能 获取信号量集合的标示符
当key所指定的信号量不存在的时候,并且semflg包含了IPC_CREAT,这个时 候,就会创建一个信号量集合
函数头文件 <sys/type.h><sys/ipc.h><sys/sem.h>
函数返回值 成功时:返回信号量集合的标示符
失败时:返回的-1
函数参数类型 key: 键值
nsems:标志:可以取IPC_CREAT
semflg:创建的这个信号量集合中包含的信号量的数目
(2)指定键值
1.任意指定一个数
缺点:这个数已经被别的IPC对象(消息队列,共享内存)所使用了,在与新创建的信号量关联就会失败
2.构造一个尽量不会被别的IPC对象所用数的方法:
使用key_t ftok(char *fname ,int id)
2.操作信号量
函数名 semop
函数原型 int semop(int semid, struct sembuf*sops,unsigned nsops)
函数功能 操作信号量
函数头文件 <sys/sem.h><sys/type.h><sys/ipc.h>
函数返回值 成功:0
失败:-1
函数参数类型 semid: 要操作的信号量集合的标示符
sembuf *sops:对信号量执行什么样的操作
nsops:要操作多少个信号量