基于信号量的生产者-消费者

信号量是进化版的互斥锁,互斥锁只能供一个线程使用,信号量可以供多个线程使用。如果希望在多个线程之间对某对象的部分数据共享,互斥锁无法实现,只能将整个数据锁住,这样导致线程并发性下降。
信号量既能保持同步,数据又不混乱,又能提高线程并发。

主要函数:

int sem_int(sem_t* sem, int pshared, unsigned int value);   //初始化信号量
int sem_destroy(sem_t* sem);    //销毁信号量

sem是信号量;pshared取0用于线程间,取非0值(一般为1)用于进程间;value指定信号量初值。

int sem_wait(sem_t *sem)    //相当于加锁,信号量>0,则信号量--(产品减少)。信号量=0(没有产品),则线程阻塞
int sem_post(sem_t *sem)    //相当于解锁,信号量++(空位增加),唤醒阻塞在信号量上的线程

sem_t类型仍是结构体,但可看做整数,忽略细节,类似文件描述符。
规定信号量不能小于0,sem_t的实现对用户隐藏,所谓++和–是通过函数实现,信号量的初值,决定了占用信号量的线程个数。

示例代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值