#include <stdio.h>
#include <pthread.h>
#include <stdlib.h>
#define NUM 10
pthread_mutex_t mutex;
pthread_cond_t conda;
pthread_cond_t condb;
pthread_cond_t condc;
int floga = 0;
int flogb = 0;
int flogc = 0;
void *thread_a(void *argv)
{
int i = 0;
char *p;
p = (char *)argv;
//printf("%s",p);
while(i < NUM)
{
pthread_mutex_lock(&mutex);
floga = 1;
pthread_cond_wait(&conda,&mutex);
floga = 0;
//pthread_mutex_unlock(&mutex);
printf("%s",p);
while(!flogb)
{
pthread_mutex_unlock(&mutex);
sleep(10);
pthread_mutex_lock(&mutex);
}
pthread_cond_signal(&condb);
pthread_mutex_unlock(&mutex);
i++;
}
floga = 1;
}
void *thread_b(void *argv)
{
int i;
char *p;
p = (char *)argv;
//printf("%s",p);
while(i < NUM)
{
pthread_mutex_lock(&mutex);
flogb = 1;
pthread_cond_wait(&condb,&mutex);
flogb = 0;
//pthread_mutex_unlock(&mutex);
printf("%s",p);
while(!flogc)
{
pthread_mutex_unlock(&mutex);
sleep(10);
pthread_mutex_lock(&mutex);
}
pthread_cond_signal(&condc);
pthread_mutex_unlock(&mutex);
i++;
}
}
void *thread_c(void *argv)
{
int i;
char *p;
p = (char *)argv;
//printf("%s",p);
while(i < NUM)
{
pthread_mutex_lock(&mutex);
flogc = 1;
pthread_cond_wait(&condc,&mutex);
flogc = 0;
//pthread_mutex_unlock(&mutex);
printf("%s",p);
while(!floga)
{
pthread_mutex_unlock(&mutex);
sleep(10);
pthread_mutex_lock(&mutex);
}
pthread_cond_signal(&conda);
pthread_mutex_unlock(&mutex);
i++;
}
}
int main()
{
pthread_t A;
pthread_t B;
pthread_t C;
int ret;
char *pa = "A";
char *pb = "B";
char *pc = "C";
pthread_mutex_init(&mutex,NULL);
pthread_cond_init(&conda,NULL);
pthread_cond_init(&condb,NULL);
pthread_cond_init(&condc,NULL);
ret = pthread_create(&A,NULL,thread_a,(void *)pa);
if(ret == -1)
{
printf("pthread_create a error!\n");
exit(-1);
}
ret = pthread_create(&B,NULL,thread_b,(void *)pb);
if(ret == -1)
{
printf("pthread_create a error!\n");
exit(-1);
}
ret = pthread_create(&C,NULL,thread_c,(void *)pc);
if(ret == -1)
{
printf("pthread_create a error!\n");
exit(-1);
}
sleep(2);
pthread_cond_signal(&conda);
pthread_join(A,NULL);
//printf("\nfinished A!\n");
pthread_join(B,NULL);
//printf("\nfinished B!\n");
pthread_join(C,NULL);
//printf("\nfinished C!\n");
printf("\nfinished!\n");
return 0;
}
转载请注明原文地址: https://ju.6miu.com/read-969974.html