Linux-条件变量


    条件变量通常用于线程间的同步,可以挂起线程,知道某些条件满足被唤醒。通常和互斥锁一同使用。

        

1. 条件变量定义

pthread_cond_t cond;

2. 条件变量初始化函数

int pthread_cond_init(pthread_cond_t *cond,const pthread_condattr_t *attr);

    或者可以通过 pthread_cond_t cond=PTHREAD_COND_INITIALIZER; 的方式直接初始化

3. 条件变量等待函数

int pthread_cond_wait(pthread_cond_t *cond,pthread_mutex_t *mutex);
int pthread_cond_timedwait(pthread_cond_t *cond,pthread_mutex_t *mutex,const struct timespec *abstime);
    pthread_cond_timedwait 可以设置一个时间 abstime,若是达到或超过 abstime 它会结束并返回 ETIME

   

    pthread_cond_wait 过程

        <1>释放持有的互斥锁 mutex

        <2>线程阻塞,等待唤醒

        <3>被唤醒时,尝试重新获取 互斥锁 mutex


4.条件变量通知函数

int pthread_cond_signal(pthread_cond_t *cond);

    pthread_cond_signal 只唤醒一个条件变量中组设的线程

int pthread_cond_broadcast(pthread_cond_t *cond);
    pthread_cond_broadcast 唤醒所有该条件变量阻塞的线程


5. 条件变量销毁函数

int pthread_cond_destroy(pthread_cond_t *cond);

你可能感兴趣的:(Linux学习)