开启3个线程输出ABCABC...

【开启3个线程输出ABCABC...】
创建三个线程ABC,每个线程输出自己的线程ID,并按照ABCABCABC...的顺序输出(ABC出现10次)

每个线程轮询一个全局变量强制使线程看似串行执行,轮询耗资源较大:

#include #include#include #include #include using namespace std; int i=0; //全局变量 static int j=10; void* th_1(void* arg){ while(j>0){//还没有输出10次 while(i!=1); //轮询 cout<<"A"; i=2; j--; } return NULL; } void* th_2(void* arg){ while(j>0){ while(i!=2); cout<<"B"; i=3; } return NULL; } void* th_3(void* arg){ while(j>0){ while(i!=3); cout<<"C"; i=1; } return NULL; } intmain(){ pthread_t pid[3]; i=1; pthread_create(&pid[0],NULL,th_1,NULL); pthread_create(&pid[1],NULL,th_2,NULL); pthread_create(&pid[2],NULL,th_3,NULL); sleep(10); return 0; }


采用条件变量和互斥锁同步线程:

#include #include #include #includeusing namespace std; pthread_mutex_t mutex[3]; //与条件变量一起使用 pthread_cond_t cnt[3]; //条件变量 int flag=0; //当前执行线程标志 bool wait[3]; //各个线程当前是执行还是等待标志 pthread_mutex_t mut; //同步线程 void* fun(void* arg){ int i=*(int*)arg; int count=0; //输出10次计数 char ch='A'+i; while(true){ if(i==flag){//若本线程是当前允许执行线程 cerr<







    推荐阅读