当前位置:  技术问答>linux和unix

关于pthread_wait和互斥锁配合的使用问题

    来源: 互联网  发布时间:2016-05-18

    本文导语:  一般pthread_wait和互斥锁配合, 例子a: pthread_mutex_lock(&mutex); pthread_cond_wait(&cond,&mutex); pthread_mutex_unlock(&mutex); pthread_cond_wait的实际过程。当发起一个pthread_cond_wait之后,分解后,实际上是三个动作:     1、解锁     ...

一般pthread_wait和互斥锁配合,

例子a:
pthread_mutex_lock(&mutex);
pthread_cond_wait(&cond,&mutex);
pthread_mutex_unlock(&mutex);

pthread_cond_wait的实际过程。当发起一个pthread_cond_wait之后,分解后,实际上是三个动作:     1、解锁     2、等待当收到一个解除等待的信号(pthread_cond_signal或者pthread_cond_broad_cast)之后,pthread_cond_wait马上需要做的动作是:     3、上锁与前面的pthread_mutex_lock对应

那既然pthread_cond_wait(&cond,&mutex)的第三步是上锁,仅仅是为了和前面的pthread_mutex_lock对应

那为什么例子a不改写为:

pthread_mutex_lock(&mutex);
pthread_cond_wait(&cond,&mutex);

pthread_cond_wait第三步不加锁,请高手解析一下



|
pthread_cond_wait()函数是需要别人来激活互斥对象的特定条件cond
而如果你原先加锁后不解锁别人是不能获得互斥对象的lock的,不可能触发cond,所以必须先unlock
在函数结束前,互斥对象的特定条件触发,相应的线程活动,获得对互斥对象的操作权限,自然在函数结束前必须lock,这是函数本身的要求,与其他函数无关
在pthread_cond_wait()和pthread_mutex_unlock()之间,该线程执行临界区代码

不知道有没有解释清楚啊...

|
因为条件变量是保护临界资源的,对临界资源的处理必须做到互斥,如果你的wait操作没有第三步上锁,那么你wait后对监界资源的处理就没有有效的互斥了。

对linux的一些系统调用,你不要只看用法定义,更重要的是深入理解其应用场景是什么?

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3