条件变量
条件变量是利用线程间共享的全局变量进行同步的一种机制,主要包括两个动作:一个线程等待"条件变量的条件成立"而挂起;另一个线程使"条件成立"(给出条件成立信号)。为了防止竞争,条件变量的使用总是和一个互斥锁结合在一起。
(就如男生在等女生和另一个男生分手 (两个同步进程),只要男生收到女生的消息(条件满足时)立马就跑去和女生告白。在未收到女生的任何消息前 (条件不满足时)男生啥都不做–> 挂起)
为了避免竞争,条件变量总是与互斥锁(mutex) 结合使用;
#include <pthread.h>
pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
int pthread_cond_init(pthread_cond_t *cond, pthread_con‐
dattr_t *cond_attr); // 初始化,cond_attr可被忽略;
int pthread_cond_signal(pthread_cond_t *cond); // 单个唤起
int pthread_cond_broadcast(pthread_cond_t *cond); // 全部唤起
int pthread_cond_wait(pthread_cond_t *cond,
pthread_mutex_t *mutex); // 等待; 自动解锁互斥锁,在信号发送前一直挂起,不占cpu; 再返回调用的进程前再锁上;
int pthread_cond_timedwait(pthread_cond_t *cond,
pthread_mutex_t *mutex, const struct timespec *abstime); // 等待(有时限)
int pthread_cond_destroy(pthread_cond_t *cond); // 销毁
mutex
互斥锁两种可能的状态:
锁上(不被持有) 和解锁(被进程持有);
#include <pthread.h>
pthread_mutex_t fastmutex = PTHREAD_MUTEX_INITIALIZER;
pthread_mutex_t recmutex = PTHREAD_RECURSIVE_MUTEX_INI‐
TIALIZER_NP;
pthread_mutex_t errchkmutex =
PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP;
int pthread_mutex_init(pthread_mutex_t *mutex, const
pthread_mutexattr_t *mutexattr);
int pthread_mutex_lock(pthread_mutex_t *mutex);
int pthread_mutex_trylock(pthread_mutex_t *mutex);
int pthread_mutex_unlock(pthread_mutex_t *mutex);
int pthread_mutex_destroy(pthread_mutex_t *mutex);