多线程系列之同步——信号量

1.什么是信号量?
信号量是线程同步的一种机制。
其引用的头文件是semaphore.h
定义的信号量格式为:sem_t sem;
涉及的函数有:
sem_init函数:初始化函数
sem_destory函数:销毁函数
sem_wait函数:检测自己的资源量,如果无资源则阻塞,,如果有资源,给自己的资源-1
sem_post函数:给对方的资源+1
sem_getValue函数:检测自身的资源数

2.信号量与条件变量的区别
条件变量更复杂,因为条件变量是否满足条件需要自己判断。但信号量是由信号量本身自己判断是否阻塞的,我们只需要更新资源数即可。

  1. 例子:
    生产者、消费者模型。
    生产者生产货品,放入仓库。消费者从仓库取商品。
    下面定义了两个信号量,一个为semp,为生产者信号量。一个为semc,为消费者信号量。
    下面二者初始化,生产者的初始最大资源数为1,表示仓库中只有一个位置可以放入货品。消费者的初始资源数为0,表示仓库中初始时无位置可以存放货品。
    *在这里插入图片描述*在这里插入图片描述
    在这里插入图片描述
  2. 信号量+互斥量
    上面虽然添加了信号量,但是会多个线程共同工作,这时候就会出现问题,需要互斥量。
    但是互斥量加在哪里不会导致死锁呢?思考。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值