题目:按照 ABCD的顺序交替打印。
1. 测试代码:
#include <iostream>
#include <unistd.h>
#include <stdlib.h>
#include <pthread.h>
using namespace std;
struct
{
int t;
pthread_mutex_t mutex;
pthread_cond_t cond;
} test = {0, PTHREAD_MUTEX_INITIALIZER, PTHREAD_COND_INITIALIZER };
void* Print(void *a)
{
int num = *(int *)a;
for(int i = 0; i < 5; ++i)
{
pthread_mutex_lock(&test.mutex);
while(num != test.t)
pthread_cond_wait(&test.cond, &test.mutex);
cout << pthread_self() << ": " << static_cast<char>('A' + num) << endl;
test.t = (test.t + 1) % 5;
pthread_mutex_unlock(&test.mutex);
pthread_cond_broadcast(&test.cond);
}
}
int main()
{
pthread_t t[5];
for(int i = 0; i < 5; ++i)
{
int *a = (int *) malloc(sizeof(int));
*a = i;
pthread_create(&t[i], NULL, Print, (void *)a);
}
for(int i = 0; i < 5; ++i)
{
pthread_join(t[i], NULL);
}
return EXIT_SUCCESS;
}
输出结果: