pthread_cond_wait() pthread_cond_signal()使用例子
时间: 2023-09-08 15:14:38 浏览: 93
下面是一个使用pthread_cond_wait()和pthread_cond_signal()的例子:
```c++
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#define NUM_THREADS 2
pthread_mutex_t mutex;
pthread_cond_t cond;
int count = 0;
void *func1(void *arg)
{
pthread_mutex_lock(&mutex);
while(count < 10)
{
if(count % NUM_THREADS == 0)
{
printf("Thread 1: count = %d\n", count);
count++;
pthread_cond_signal(&cond);
}
else
{
pthread_cond_wait(&cond, &mutex);
}
}
pthread_mutex_unlock(&mutex);
pthread_exit(NULL);
}
void *func2(void *arg)
{
pthread_mutex_lock(&mutex);
while(count < 10)
{
if(count % NUM_THREADS == 1)
{
printf("Thread 2: count = %d\n", count);
count++;
pthread_cond_signal(&cond);
}
else
{
pthread_cond_wait(&cond, &mutex);
}
}
pthread_mutex_unlock(&mutex);
pthread_exit(NULL);
}
int main()
{
pthread_t threads[NUM_THREADS];
pthread_mutex_init(&mutex, NULL);
pthread_cond_init(&cond, NULL);
pthread_create(&threads[0], NULL, func1, NULL);
pthread_create(&threads[1], NULL, func2, NULL);
for(int i=0; i<NUM_THREADS; i++)
{
pthread_join(threads[i], NULL);
}
pthread_mutex_destroy(&mutex);
pthread_cond_destroy(&cond);
return 0;
}
```
这个例子中,我们创建了两个线程,func1()和func2()。这两个线程都会尝试对count变量进行操作,但是它们必须轮流访问count。当count是偶数时,func1()会递增它,当count是奇数时,func2()会递增它。在每次递增后,线程会发送信号来通知另一个线程它可以开始执行。如果另一个线程当前不能执行,它会等待信号。当count达到10时,线程就会退出。
在这个例子中,pthread_cond_wait()的作用是让线程等待信号,而pthread_cond_signal()的作用是发送信号。这样,我们可以实现线程之间的同步,并且避免了busy waiting。
阅读全文