使用pthread_cond_wait进行线程同步的代码示例
时间: 2023-08-31 15:53:12 浏览: 95
pthread_cond_wait() 用法深入分析
下面是一个使用pthread_cond_wait进行线程同步的简单示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
pthread_mutex_t mutex;
pthread_cond_t cond;
int count = 0;
void* thread_func(void* arg) {
pthread_mutex_lock(&mutex); // 加锁
while (count < 5) {
pthread_cond_wait(&cond, &mutex); // 等待条件变量满足
}
printf("Thread: count reached 5\n");
pthread_mutex_unlock(&mutex); // 解锁
pthread_exit(NULL);
}
int main() {
pthread_t thread;
pthread_mutex_init(&mutex, NULL);
pthread_cond_init(&cond, NULL);
pthread_create(&thread, NULL, thread_func, NULL);
pthread_mutex_lock(&mutex); // 加锁
for (int i = 0; i < 5; i++) {
count++;
printf("Main: count = %d\n", count);
if (count == 5) {
pthread_cond_signal(&cond); // 发送信号唤醒等待线程
}
pthread_mutex_unlock(&mutex); // 解锁
sleep(1); // 让主线程休眠1秒
pthread_mutex_lock(&mutex); // 加锁
}
pthread_mutex_unlock(&mutex); // 解锁
pthread_join(thread, NULL);
pthread_mutex_destroy(&mutex);
pthread_cond_destroy(&cond);
return 0;
}
```
这个示例中,主线程和子线程共享变量`count`,主线程通过循环递增`count`的值,并在`count`等于5时发送信号唤醒等待线程,子线程通过`pthread_cond_wait`等待条件变量满足,当`count`等于5时,子线程被唤醒并输出相关信息。主线程和子线程通过互斥锁`mutex`保护共享变量的访问,保证线程同步。
阅读全文