为什么使用条件变量

条件变量

注意:条件变量本身不是锁,他只是一个机制,但他通常于互斥锁配合,能够实现线程阻塞

为什么要使用条件变量

1.提高cpu使用效率:相交于使用简单的互斥锁,条件变量能够有效的减少cpu的使用时间,因为互斥锁在阻塞时需要不断的轮询判断,而 条件变量将线程挂起,等待信号唤醒
2.**减少死锁的发生:**条件变量在阻塞线程时,会将线程的互斥锁资源释放,等到线程唤醒时线程重新获得互斥锁资源,依旧是独占访问

相关问题的解释:

1.释放互斥锁资源的优势:

​ 其实,释放互斥锁资源并不单单能够减少死锁的发生,在多线程编程中,一般都是一个共享资源一个互斥锁,因此在生产者和消费者模型中,如果生产者(消费者)在阻塞期间不释放互斥锁资源,那么生产者或者消费者就无法进行生产或消费,如果不使用条件变量进行同步,那么同步的实现就会显得特别麻烦

2.一个互斥锁和多个条件变量

​ 在生产者和消费者模型中,我们经常看见一个互斥锁和多个条件变量的情况,关于为什么是一个互斥锁,是因为如果不使用同一个互斥锁,我们就无法对共享资源进行同步,这不难理解;关于多个条件变量,例如,我们会给生产者一个等待生产的条件变量和给消费者一个等待消费的条件变量,这样做的好处就是我们能够提高代码的可读性,有利于维护,简化的复杂的等待和通知的逻辑,对于生产者和消费者各自一个条件变量,对于同步数据的访问更简单

3.关于独占访问

​ 为了能够实现独占访问,我们一般使用循环判断,如果线程没有抢到互斥锁资源,那么会重新进行条件判断,然后继续阻塞

  • 6
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值