网络原题:
编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输
出结果必须按ABC的顺序显示;如:ABCABC….依次递推
这里设置ITEM=4,即依次打印ABCDABCD……………………
#include <stdio.h> #include <stdlib.h> #include<pthread.h> /*int pthread_create(pthread_t*restrict tidp, * const pthread_attr_t *restrict_attr, * void*(*start_rtn)(void*),void *restrict arg);*/ /*第一个参数为指向线程标识符的指针。 第二个参数用来设置线程属性。 第三个参数是线程运行函数的起始地址。 最后一个参数是运行函数的参数。*/ #define ITEM 4 struct { pthread_mutex_t mutex; pthread_cond_t cond; int i; }test={ PTHREAD_MUTEX_INITIALIZER,PTHREAD_COND_INITIALIZER,0 }; void PrintA(void *arg) { int num=*(int*)arg; int i; //printf("\n线程%d开始工作,我打印的是%c\n",pthread_self(),'A'+num); for(i=0;i<10;i++){ pthread_mutex_lock(&test.mutex); while(test.i!=num) pthread_cond_wait(&test.cond,&test.mutex); printf("%c",'A'+num); test.i=(test.i+1)%ITEM; pthread_mutex_unlock(&test.mutex); pthread_cond_broadcast(&test.cond); } //printf("\n线程%d完成任务\n",pthread_self()); } int main(void) { pthread_t t[ITEM]; int i=1; printf("共有%d个线程\n",ITEM); for(i=0;i<ITEM;i++){ int *a=(int *)malloc(sizeof(int)); *a=i; pthread_create(&t[i],NULL,PrintA,a); } for(i=0;i<ITEM;i++){ pthread_join(t[i],NULL); } return EXIT_SUCCESS; }
运行结果:
共有4个线程
ABCDABCDABCDABCDABCDABCDABCDABCDABCDABCD