题目:按照 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;}
输出结果: