条件变量是利用线程间共享的全局变量进行同步的一种机制,主要包括两个动作:
(1)一个线程等待"条件变量的条件成立"而挂起;
(2)另一个线程使"条件成立"(给出条件成立信号)。
(3)为了防止竞争,条件变量的使用总是和一个互斥锁结合在一起。
-
int pthread_cond_init(pthread_cond_t *cond, pthread_condattr_t *cond_attr)
作用:动态创建条件变量 -
pthread_mutex_lock
作用:互斥锁上锁 -
pthread_mutex_unlock
作用:互斥锁解锁 -
pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex)
作用:等待条件变量,挂起线程。释放mutex,进入阻塞状态,等待被别的线程唤醒。阻塞等待的条件满足被唤醒后,再次获得mutex。
说明:当线程执行pthread_cond_wait时,一定是处于某个临界区,正在访问共享资源,存在一个mutex与该临界区相关联。因此,在阻塞前,必须释放mutex;被唤醒后,仍然处于临界区,因此需要再次获得mutex。
pthread_cond_timedwait()
作用:等待条件变量,挂起线程,如果到了timeout,线程自动解除阻塞。 -
pthread_cond_signal
作用:激活等待列表中的线程
pthread_cond_broadcast()
作用:激活所有等待线程列表中最先入队的线程 -
pthread_mutex_destroy
作用:销毁线程锁
注意:上面这几个函数都是原子操作,必须配合使用。
参考链接: 1
参考链接: [2]https://blog.csdn.net/lyx_323/article/details/82897192