sem线程信号量

sem线程信号量
线程信号量使用步骤:
(1)定义信号量集合(如:sem_t sem[3]);
注:线程信号量集合其实就是一个数组,数组每个元素就是一个信号量。
(2)初始化集合中的每个信号量;
(3)p、v操作;
(4)进程结束时,删除线程信号量集合。
1、sem_init初始化信号量
1、头文件:#include <semaphore.h>
2、函数原型:int sem_init(sem_t *sem, int pshared, unsigned int value);
3、函数形参:sem:信号量集合中的某个信号量地址;
pshared:若为0:给线程使用 / 若为非0:可以给进程使用;
value:初始化值。
注:pshared:通常不用!0值。对于进程来说,更多的还是使用进程信号量,因为线程信号量用到进程上时,存在一些不稳定的情况。
4、函数返回值:成功返回0,失败返回-1,errno被设置。
2、sem_wait信号量操作
1、P操作
(1)头文件:#include <semaphore.h>
(2)函数原型:int sem_wait(sem_t *sem);//阻塞p操作
(3)函数形参:sem:信号量集合中的某个信号量地址;
(4)函数返回值:成功返回0,失败返回-1,errno被设置。
(5)功能:阻塞p操作集合中某个信号量,信号量的值-1。
如果能够p操作成功最好,否则就阻塞直到p操作操作成功为止。
(6)使用示例:sem_wait(&sem[0]);
2、V操作
(1)头文件:#include <semaphore.h>
(2)函数原型:int sem_post(sem_t *sem);
(3)函数形参:sem:信号量集合中的某个信号量地址;
(4)函数返回值:成功返回0,失败返回-1,errno被设置。
(5)功能:v操作成功后,信号量的值+1。
对某个信号量进行v操作,v操作不存在阻塞问题。
(6)使用示例:sem_post(&sem[0]);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值