源代码:
#include<iostream>
#include<unistd.h>
#include<pthread.h>
using namespace std;
#define MAX_COUNT 10
static int count = 1;
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t is_odd = PTHREAD_COND_INITIALIZER;
pthread_cond_t is_even = PTHREAD_COND_INITIALIZER;
void* A_fun(void *arg)
{
pthread_mutex_lock(&mutex);
while(count <= MAX_COUNT)
{
if(count % 2 == 1)
{
cout << "In A_fun:" << count++ << endl;
pthread_cond_signal(&is_even);
}
else
{
pthread_cond_wait(&is_odd, &mutex);
}
}
pthread_mutex_unlock(&mutex);
}
void* B_fun(void *arg)
{
pthread_mutex_lock(&mutex);
while(count <= MAX_COUNT)
{
if(count % 2 == 0)
{
cout << "In B_fun:" << count++ << endl;
pthread_cond_signal(&is_odd);
}
else
{
pthread_cond_wait(&is_even, &mutex);
}
}
pthread_mutex_unlock(&mutex);
}
int main()
{
pthread_t tid1, tid2;
pthread_create(&tid1, NULL, A_fun, NULL); //1 3 5 7 9
pthread_create(&tid2, NULL, B_fun, NULL); //2 4 6 8 10
pthread_join(tid1, NULL);
pthread_join(tid2, NULL);
return 0;
}
运行结果: