题目:三个线程轮流打印数字,从0开始,其中:
线程1打印:0,3,6----
线程2打印:1,4,7----
线程3打印:2,5,8----
以此类推
在博客看到很多都是用Java和c++实现的,我想用c+来实现一下。
下面看代码;
#include
#include
#include
#include
#include
#include
#include
int g_num;
pthread_mutex_t mutex;
pthread_cond_t cond1,cond2,cond3;
void* Func_p1(void* arg)
{
while(1)
{
pthread_mutex_lock(&mutex);
pthread_cond_wait(&cond1,&mutex);
printf("---thread id: %lu , p1 num: %d \n",pthread_self(),g_num);
pthread_mutex_unlock(&mutex);
sleep(1);
}
return NULL;
}
void* Func_p2(void* arg)
{
while(1)
{
pthread_mutex_lock(&mutex);
pthread_cond_wait(&cond2,&mutex);
printf("---thread id: %lu , p2 num: %d \n",pthread_self(),g_num);
pthread_mutex_unlock(&mutex);
sleep(1);
}
return NULL;
}
void* Func_p3(void* arg)
{
while(1)
{
pthread_mutex_lock(&mutex);
pthread_cond_wait(&cond3,&mutex);
printf("---thread id: %lu , p3 num: %d \n",pthread_self(),g_num);
pthread_mutex_unlock(&mutex);
sleep(1);
}
return NULL;
}
void* Func_p4(void* arg)
{
while(1)
{
pthread_mutex_lock(&mutex);
++g_num;
pthread_mutex_unlock(&mutex);
if((g_num % 3) == 0)
pthread_cond_signal(&cond3);
else if((g_num % 3) == 1)
pthread_cond_signal(&cond1);
else if((g_num % 3) == 2)
pthread_cond_signal(&cond2);
sleep(1);
}
return NULL;
}
int main()
{
pthread_t p1,p2,p3,p4;
pthread_mutex_init(&mutex,NULL);
pthread_cond_init(&cond1,NULL);
pthread_cond_init(&cond2,NULL);
pthread_cond_init(&cond3,NULL);
pthread_create(&p1,NULL,Func_p1,NULL);
pthread_create(&p2,NULL,Func_p2,NULL);
pthread_create(&p3,NULL,Func_p3,NULL);
pthread_create(&p4,NULL,Func_p4,NULL);
pthread_join(p1,NULL);
pthread_join(p2,NULL);
pthread_join(p3,NULL);
pthread_join(p4,NULL);
pthread_mutex_destroy(&mutex);
pthread_cond_destroy(&cond1);
pthread_cond_destroy(&cond2);
pthread_cond_destroy(&cond3);
return 0;
}