编写一个程序,开启3个 线程,这3个线程的ID分别为ABC,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示,如ABCABC……依次递推;
#include<stdio.h>
#include<semaphore.h>
#include<pthread.h>
#include<unistd.h>
#include<sys/types.h>
#include<stdlib.h>
sem_t sem1;
sem_t sem2;
sem_t sem3;
int i=0;
void *callback1(void*arg)
{
while(1)
{
sem_wait(&sem1);
if(i>=10)
exit(0);
i++;
printf("A");
sem_post(&sem2);
}
}
void *callback2(void*arg)
{
while(1)
{
sem_wait(&sem2);
printf("B");
sem_post(&sem3);
}
}
void *callback3(void*arg)
{
while(1)
{
sem_wait(&sem3);
printf("C\n");
sem_post(&sem1);
}
}
int main(int argc, const char *argv[])
{
pthread_t sid1,sid2,sid3;
if(sem_init(&sem1,0,1)<0)
{
perror("sem_init");
return -1;
}
if(sem_init(&sem2,0,0)<0)
{
perror("sem_init");
return -1;
}
if(sem_init(&sem3,0,0)<0)
{
perror("sem_init");
return -1;
}
if(pthread_create(&sid1,NULL,callback1,NULL)!=0)
{
perror("pthread_create");
return -1;
}
if(pthread_create(&sid2,NULL,callback2,NULL)!=0)
{
perror("pthread_create");
return -1;
}
if(pthread_create(&sid3,NULL,callback3,NULL)!=0)
{
perror("pthread_create");
return -1;
}
pthread_join(sid1,NULL);
pthread_join(sid2,NULL);
pthread_join(sid3,NULL);
return 0;
}
演示结果: