pthread_cond_wait应用举例
时间: 2023-10-17 12:14:23 浏览: 89
pthreads使用例子
pthread_cond_wait() 可以用于线程之间的同步,当一个线程需要等待另一个线程完成某个操作后再继续执行时,可以使用 pthread_cond_wait()。下面是一个简单的示例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
int count = 0;
void *producer(void *arg)
{
for (int i = 0; i < 10; i++) {
pthread_mutex_lock(&mutex); // 加锁
count++;
printf("Producer: produced item %d\n", count);
pthread_cond_signal(&cond); // 发送信号
pthread_mutex_unlock(&mutex); // 解锁
}
pthread_exit(NULL);
}
void *consumer(void *arg)
{
for (int i = 0; i < 10; i++) {
pthread_mutex_lock(&mutex); // 加锁
while (count == 0) { // 如果 count 为 0,等待信号
pthread_cond_wait(&cond, &mutex);
}
printf("Consumer: consumed item %d\n", count);
count--;
pthread_mutex_unlock(&mutex); // 解锁
}
pthread_exit(NULL);
}
int main()
{
pthread_t tid1, tid2;
pthread_create(&tid1, NULL, producer, NULL);
pthread_create(&tid2, NULL, consumer, NULL);
pthread_join(tid1, NULL);
pthread_join(tid2, NULL);
return 0;
}
```
在这个示例中,生产者线程和消费者线程共享一个变量 count,生产者线程不断地增加 count,消费者线程不断地减少 count,但是当 count 为 0 时,消费者线程必须等待生产者线程生产出新的物品。为了实现这个功能,我们使用了 pthread_cond_wait()。在消费者线程中,如果 count 为 0,就调用 pthread_cond_wait() 等待生产者线程发送信号。当生产者线程生产出新的物品时,调用 pthread_cond_signal() 发送信号,消费者线程就可以继续执行了。注意,在使用 pthread_cond_wait() 时,必须先加锁,等待信号时自动解锁,信号到来时自动加锁。
阅读全文