编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推。
程序中用线程函数func的参数para来判断是打印A或B或C的线程。
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <unistd.h>
#include <string.h>
//#define DEBUG 1
#define NUM 3
int n=0;
pthread_mutex_t mutex;
pthread_cond_t cond;
void *func(void * para)
{
int i=0;
for(i=0;i<10;i++)
{
pthread_mutex_lock(&mutex);
while((int)para!=n)
pthread_cond_wait(&cond,&mutex);
printf("%d---%c\n",i,para+'A');
n=(n+1)%3;
pthread_cond_broadcast(&cond);
pthread_mutex_unlock(&mutex);
}
return ((void*)0);
}
int main(int argc, char** argv) {
int i=0,err;
pthread_t tid[NUM];
void *tret;
for(;i<NUM;i++)
{
err=pthread_create(&tid[i],NULL,func,(void *)i);
if(err!=0)
{
printf("thread_create error:%s\n",strerror(err));
exit(-1);
}
}
for (i = 0; i < NUM; i++)
{
err = pthread_join(tid[i], &tret);
if (err != 0)
{
printf("can not join with thread %d:%s\n", i,strerror(err));
exit(-1);
}
}
printf("\n");
return 0;
}