#include <list>
#include <cstdio>
#include<cstdlib>
#include<unistd.h>
#include <exception>
#include <pthread.h>
#include<iostream>
#include<string>
#define num 3
using namespace std;
pthread_mutex_t lock;
volatile int XHL;
pthread_cond_t cond;
struct info{
int id;
string info;
};
void* fun(void* arg)
{
while(1)
{
XHL--;
if(XHL>0)
{
// pthread_mutex_lock(&lock);
auto i=(struct info*)arg;
sleep(3);
cout<<"thread_id:"<<i->id<<i->info<<endl;
// pthread_mutex_unlock(&lock);
XHL++;
// pthread_exit(nullptr);
}
}
}
void* fun1(void* arg)
{
while(1)
{
pthread_mutex_lock(&lock);
pthread_cond_wait(&cond,&lock);
auto i=(struct info*)arg;
cout<<"thread id:"<<i->id<<endl;
pthread_mutex_unlock(&lock);
}
}
void* fun2(void* arg)
{
while(1)
{
sleep(3);
cout<<"tongzhi"<<endl;
pthread_cond_broadcast(&cond);
//pthread_cond_signal(&cond);
}
pthread_exit(nullptr);
}
int main(){
pthread_mutex_init(&lock,nullptr);
int a=2;
XHL=1;
pthread_cond_init(&cond,nullptr);
pthread_t tid[num];
info t[num];
int flag=pthread_create(&tid[0],nullptr,fun1,(void*)&t[0]);
flag=pthread_create(&tid[1],nullptr,fun1,(void*)&t[1]);
flag=pthread_create(&tid[2],nullptr,fun2,(void*)&t[2]);
cout<<"pthread_self"<<pthread_self<<endl;
if(flag==-1)
cout<<"pthreat_creat error"<<endl;
for(int i=0;i<num;i++)
{
cout<<"main_thread"<<endl;
}
pthread_detach(tid[0]);
pthread_detach(tid[1]);
pthread_detach(tid[2]);
/* void* status;
for(int i=0;i<num;i++)
{
bool flag=pthread_join(tid[i],&status);
if(flag==1)
cout<<"join error"<<endl;
cout<<"exit status:"<<status<<endl;
}*/
pthread_exit(nullptr);
return -1;
}
C++多线程实例(使用条件变量)
最新推荐文章于 2022-06-27 13:51:54 发布