POSIX条件变量(生产者,消费者)

POSIX条件变量

1,当一个线程互斥的访问条件变量的时候,它发现这个变量当前的状态不满足这个线程得以继续执行的要求

  就需要等待其它线程对该变量进行更改,直到满足它的要求,不然的话,它什嘛也不做。。。。。。。。。

  等待条件的满足。这个时候呢,,,就需要用到条件变量


  如上,一个全局变量n = 0;

  两个线程,都有加锁机制,一旦进入临界区,当线程1进入临界区之后,那么就会加锁,线程2也就进不去了

  ,然后根本无法使得n大于0,所以线程1也就无法往下继续执行了,出现了死锁

  这个时候,我们就需要其它的手段来解决这个问题了,,,那么就是采用条件变量

  通常一个进程进入临界区会加一个互斥锁(mutex,lock),那么条件变量需要跟互斥锁配合使用

  为什么要配合使用呢???

  1,我们所等待的条件n是多个线程都可以访问的。。。因而对这个条件的保护需要用到锁操作

  2,一旦一个线程对条件进行了互斥锁加锁,那么其它的线程就无法进入到临界区了

    所以说:条件变量能够跟一个锁配合在一起使用,那么条件变量在等待条件的时候,必须能够对这把锁进行

        解锁,,,(也就是说:条件变量在等待的时候,第一步一定是先解锁,如果没有进行解锁,其

        它线程没有机会进入到临界区中,还是跟上面死锁是一样的,一旦解锁了,其它线程就有可能

        进入到临界区使得条件合适(n大于0)),同时一旦等待的线程对互斥锁进行了解锁,也允许

        其它的线程进入到临界区,等待同样的一个

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值