当前位置: 技术问答>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第三步不加锁,请高手解析一下
例子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()之间,该线程执行临界区代码
不知道有没有解释清楚啊...
而如果你原先加锁后不解锁别人是不能获得互斥对象的lock的,不可能触发cond,所以必须先unlock
在函数结束前,互斥对象的特定条件触发,相应的线程活动,获得对互斥对象的操作权限,自然在函数结束前必须lock,这是函数本身的要求,与其他函数无关
在pthread_cond_wait()和pthread_mutex_unlock()之间,该线程执行临界区代码
不知道有没有解释清楚啊...
|
因为条件变量是保护临界资源的,对临界资源的处理必须做到互斥,如果你的wait操作没有第三步上锁,那么你wait后对监界资源的处理就没有有效的互斥了。
对linux的一些系统调用,你不要只看用法定义,更重要的是深入理解其应用场景是什么?
对linux的一些系统调用,你不要只看用法定义,更重要的是深入理解其应用场景是什么?
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。