3つのスレッドが順番にABCを印刷する
14663 ワード
スレッド1 A、スレッド2 B、スレッド3 Cを印刷し、順次10回印刷する(ABCABCABC...)
#include
#include
#include
#include
#include
#include
sem_t sem[3];
void* task1(void* arg)
{
char* name =(char*)arg;
while(1)
{
sem_wait(&sem[0]);
printf("A
");
sleep(1);
sem_post(&sem[1]);
}
sem_destroy(&sem[0]);
pthread_exit(NULL);
}
void* task2(void* arg)
{
char* name =(char*)arg;
while(1)
{
sem_wait(&sem[1]);
printf("B
");
sleep(1);
sem_post(&sem[2]);
}
sem_destroy(&sem[1]);
pthread_exit(NULL);
}
void* task3(void* arg)
{
char* name =(char*)arg;
while(1)
{
sem_wait(&sem[2]);
printf("C
");
sleep(1);
sem_post(&sem[0]);
}
sem_destroy(&sem[2]);
pthread_exit(NULL);
}
int main()
{
sem_init(&sem[0],0 ,1);
sem_init(&sem[1],0 ,0);
sem_init(&sem[2],0 ,0);
pthread_t ptid[3];
if(pthread_create(&ptid[0],NULL,task1,"friend1")!=0)
{
perror("pthread_create error!");
exit(1);
};
if(pthread_create(&ptid[1],NULL,task2,"friend2")!=0)
{
perror("pthread_create error!");
exit(1);
}
if(pthread_create(&ptid[2],NULL,task3,"friend2")!=0)
{
perror("pthread_create error!");
exit(1);
}
pthread_exit(NULL);
}