64,683
社区成员
发帖
与我相关
我的任务
分享
void* addthread(void * args)
{
int &content = *((int*)args);
cout<<"enter Add thread,Current content:"<<content<<endl;
do
{ usleep(5000);
pthread_mutex_lock(&opmutex);
content++;
cout<<"ADD content:"<<content<<endl;
pthread_mutex_unlock(&opmutex);
}
while(content<=99);
pthread_exit(0);
}
void * decthread(void * args)
{
int &content = *((int*)args);
cout<<"enter Decrease thread, Current content:"<<content<<endl;
do
{ usleep(10000);
pthread_mutex_lock(&opmutex);
content--;
cout<<"DECREASE content:"<<content<<endl;
pthread_mutex_unlock(&opmutex);
}
while(content<=97&&content>0);
pthread_exit(0);
}
int main()
{
...
int content = 10;
int ret = pthread_create(&tid[0],&attr,addthread,((void*)&content));
int ret = pthread_create(&tid[1],&attr,decthread,((void*)&content));
....
}
int main()
{
cout<<"begin"<<endl;
int content = 20;
pthread_attr_t attr;
int ren = pthread_attr_init(&attr);
if(ren)
{
cout<<"error "<<ren<<" in attr init"<<endl;
return -1;
}
cout<<"1"<<endl;
ren = pthread_attr_setdetachstate(&attr,PTHREAD_CREATE_JOINABLE);
if(ren)
{
cout<<"error"<<ren<<" in attr attach"<<endl;
return -1;
}
pthread_mutex_init(&opmutex,NULL);
pthread_t tid[2];
int ret = pthread_create(&tid[0],&attr,addthread,((void*)&content));
if(ret)
{
cout<<"error in create thread 1"<<endl;
return -1;
}
ret = pthread_create(&tid[1],&attr,decthread,(void*)(&content));
if(ret)
{
cout<<"error in create thread 2"<<endl;
return -1;
}
pthread_attr_destroy(&attr);
void * state;
ret = pthread_join(tid[0],&state);
if(ret)
{
cout<<"join error of thread1"<<endl;
return -1;
}
ret = pthread_join(tid[1],&state);
if(ret)
{
cout<<"join error of thread2"<<endl;
return -1;
}
pthread_mutex_destroy(&opmutex);
cout<<"end"<<endl;
return 0;
}