条件变量与互斥锁

与互斥锁不同,条件变量是用来等待而不是用来上锁的。条件变量用来自动阻塞一个线程,直到某特殊情况发生为止。通常条件变量和互斥锁同时使用。

条件变量使我们可以睡眠等待某种条件出现。条件变量是利用线程间共享的全局变量进行同步的一种机制,主要包括两个动作:一个线程等待"条件变量的条件成立"而挂起;另一个线程使"条件成立"(给出条件成立信号)。

条件的检测是在互斥锁的保护下进行的。如果一个条件为假,一个线程自动阻塞,并释放等待状态改变的互斥锁。如果另一个线程改变了条件,它发信号给关联的条件变量,唤醒一个或多个等待它的线程,重新获得互斥锁,重新评价条件。

pthread_mutex_lock(&pthreadMutex);    //如果加锁不成功,就在这里阻塞


pthread_cond_wait(&pthreadCond,&pthreadMutex);//加锁成功后,等待条件变量成立,同时解锁。被唤醒后又重新获得锁。


pthread_mutex_unlock(&pthreadMutex);

posted @ 2012-03-08 19:54  Think--@  阅读(300)  评论(0编辑  收藏  举报