情景1:Jack开着一辆出租车来到一个站点停车,看见没人就走了。过段时间,Susan来到站点准备乘车,但是没有来,于是就等着。过了一会Mike开着车来到了这个站点,Sunsan就上了Mike的车走了。如图所示:程序实现该情景:#include
#include
#include
#include
pthread_cond_t taxicond = PTHREAD_COND_INITIAL...
分类:
编程语言 时间:
2014-09-17 15:14:32
阅读次数:
288
条件变量是利用线程间共享的全局变量进行同步的一种机制,主要包括两个动作:一个线程等待条件变量的条件成立而挂起(此时不再占用cpu);另一个线程使条件成立(给出条件成立信号)。为了防止竞争,条件变量的使用总是和一个互斥锁结合在一起。/* 等待条件 *//* 注意:pthread_cond_wait为阻...
分类:
编程语言 时间:
2014-09-09 15:02:48
阅读次数:
288
pthread_cond
条件变量 pthread_cond, 另外一种线程间的同步机制。普通的 mutex 只允许一个线程进入临界区,就是拿到mutex这把锁的线程,而cond 允许多个线程同时进入临界区,由它来控制,在某些条件成立的时候,来唤醒其中一个等待着的线程,或者是唤醒所有等待着的线程。
int pthread_cond_wait(pthread_cond_t* cond, ...
分类:
编程语言 时间:
2014-08-29 14:43:18
阅读次数:
182
/************pthread_cond_wait()的使用方法**********/pthread_mutex_lock(&qlock); /*lock*/pthread_cond_wait(&qready, &qlock); /*block-->unlock-->wait() ret....
分类:
其他好文 时间:
2014-08-28 19:46:55
阅读次数:
219
pthread_cond_wait在把线程放进阻塞队列后,自动对mutex进行解锁(它内部有自己维护一个队列),使得其他线程可以获得加锁的权利。这样其它线程才能对临界资源进行访问并在适当的时候唤醒这个阻塞的进程。当pthread_cond_wait返回的时候又会自动给mutex加锁,所以最后需要一个...
分类:
其他好文 时间:
2014-08-06 18:05:42
阅读次数:
260
pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t*mutex)函数
传入的参数mutex用于保护条件,因为我们在调用pthread_cond_wait时,如果条件不成立我们就进入阻塞,但是进入阻塞这个期间,如果条件变量改变了的话,那我们就漏掉了这个条件。因为这个线程还没有放到等待队列上,所以调用pthread_cond_wait前要先...
分类:
编程语言 时间:
2014-07-17 20:24:12
阅读次数:
236
1.程序框架分析:a)首先将mutex, condition, queue 封装成各自的类,方便对外提供接口函数,这里要注意 condition的封装,一个条件变量和一把锁是一起用的,因此在初始化 condition 对象的时候要用一个 mutex 对象去初始化,在pthread_cond_wait...
分类:
编程语言 时间:
2014-07-16 17:43:12
阅读次数:
203
LINUX环境下多线程编程肯定会遇到需要条件变量的情况,此时必然要使用pthread_cond_wait()函数。但这个函数的执行过程比较难于理解。
pthread_cond_wait()的工作流程如下(以MAN中的EXAMPLE为例):
Consider two shared variables x and y, protected by the mutex mut,...
分类:
其他好文 时间:
2014-07-10 19:50:36
阅读次数:
347
这是来自知乎的一个问题,由@吴志强提出,有意思的是,他看了大家的回答后,突然顿悟了,同时也发现有人答错了,于是乎,他自己回答了自己的问题。我看完后,发现他分析的很精彩,于是就记录在这。下面是他的自答:
-----------------------------------------------------------------------------
看了之后,我获得了启发,突然觉得这或许...
分类:
其他好文 时间:
2014-06-15 17:47:25
阅读次数:
252
互斥锁用于上锁,条件变量则用于等待。条件变量是类型为pthread_cond_t的变量。一般使用如下函数:
#include
int pthread_cond_wait(pthread_cond_t *cptr, pthread_mutex_t *mptr);
int pthread_cond_signal(pthread_cond_t *cptr);每个条件变量总是有一个互斥锁与之关联。调用...
分类:
系统相关 时间:
2014-06-08 17:45:15
阅读次数:
337