【开启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<