zoukankan      html  css  js  c++  java
  • 条件变量 pthread_cond_wait ()

     

    关于pthread_cond_wait()的解释:

    这个函数是比较难以理解的~

    我们且看:pthread_cond_wait()的内部的过程是什么?:就是“解锁”->“sleep”->“加锁”

     

    由上图,我们可以知道:ifARead dataB先锁住M,那么在while(empty(Q)),时候,发现队列是空的,那么pthread_cond_wait() 这个时候需要做的是:解除M锁!(那么A那边就可以加锁了,可以执行下面的动作。。。),然后进入一个Sleep睡眠状态,所以不会消耗CPU,这正是我们需要的结果!(if不是,那么仅仅要互斥量就可以了不是吗?呵呵~)...

     

    对于A这边处理OK数据后,就会发送一个“signal”C来提示B你现在的条件来了~(几乎所有的文档都会提到此处的“signal”不同于SIG_HUP之类的正真的信号~),随后A将M解锁!此时对于B来说,那么pthread_cond_wait()要做的不是马上返回哟,而是将M再次加锁!那么A那么就被互斥了,就要等待B读取结束才能执行~

    如此循环!

    所以主要就是要理解pthread_cond_wait()的内部动作:“解锁”->“sleep”->“加锁”!

    不知道有没有说清楚,呵呵呵~~~

     

    注:引入条件量,主要是为了减少消耗CPU的时间!它进入的是睡眠的状态而不是“轮循”状态,所以~~~

  • 相关阅读:
    倒排索引
    线控的原理
    性格类型之ISFP艺术家型——有爱心的艺术工作者
    亚马逊面试题及解法
    关于过度设计的思考(zz)
    给Visual Studio 2010中文版添加Windows Phone 7模板
    MySQL性能优化zz
    上班玩游戏,老总是怎么知道的呢?
    基于AJAX的自动完成
    JavaScript在ASP.NET AJAX中的另类故事
  • 原文地址:https://www.cnblogs.com/xyz123753/p/2609786.html
Copyright © 2011-2022 走看看