pthread_cond_t 使用
时间: 2023-11-04 18:53:17 浏览: 180
pthread_cond
pthread_cond_t 是 POSIX 线程库中的条件变量类型,用于线程间的同步和通信。下面是使用 pthread_cond_t 的一般流程:
1. 创建条件变量对象:使用 pthread_cond_init 函数初始化条件变量对象,例如:
```
pthread_cond_t cond;
pthread_cond_init(&cond, NULL);
```
2. 等待条件:在线程中调用 pthread_cond_wait 函数等待条件满足,例如:
```
pthread_mutex_lock(&mutex); // 先获取互斥锁
while (!condition) { // 判断条件是否满足,如果不满足则等待
pthread_cond_wait(&cond, &mutex);
}
// 条件满足后执行相应的逻辑
// ...
pthread_mutex_unlock(&mutex); // 最后释放互斥锁
```
3. 修改条件:在其他线程中修改条件,并使用 pthread_cond_signal 或 pthread_cond_broadcast 函数通知等待的线程条件已经改变:
- pthread_cond_signal 用于通知一个等待的线程,例如:
```
pthread_mutex_lock(&mutex); // 先获取互斥锁
condition = true; // 修改条件
pthread_cond_signal(&cond); // 通知等待的线程条件已经改变
pthread_mutex_unlock(&mutex); // 最后释放互斥锁
```
- pthread_cond_broadcast 用于通知所有等待的线程,例如:
```
pthread_mutex_lock(&mutex); // 先获取互斥锁
condition = true; // 修改条件
pthread_cond_broadcast(&cond); // 通知所有等待的线程条件已经改变
pthread_mutex_unlock(&mutex); // 最后释放互斥锁
```
4. 销毁条件变量对象:使用 pthread_cond_destroy 函数销毁条件变量对象,例如:
```
pthread_cond_destroy(&cond);
```
需要注意的是,使用条件变量时需要搭配互斥锁(pthread_mutex_t)一起使用,以保证线程安全性。在等待条件时会自动释放互斥锁,在收到通知后重新获取互斥锁,避免竞争条件。
阅读全文