编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推。--迅雷笔试题
#include <stdio.h>
#include <fcntl.h> /* For O_* constants */
#include <sys/stat.h>
#include <semaphore.h>
#include <sys/wait.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
int main()
{
pid_t pid;
int i;
int j=0;
sem_t *sem_A,*sem_B, *sem_C;
sem_A=sem_open("sem_A",O_CREAT | O_RDWR, 0666,1);
sem_B=sem_open("sem_B",O_CREAT | O_RDWR, 0666,0);
sem_C=sem_open("sem_C",O_CREAT | O_RDWR, 0666,0);
for( i=0;i<3;i++)
{
pid=fork();
if(pid<0)
{
perror("pid");
exit(0);
}
else if(pid>0)
{
printf("pid success\n");
}
else
{
break;
}
}
sleep(1);
for(j=0;j<10;j++)
{
if(i==0)
{
sem_wait(sem_A);
printf("pidA=%d\n",getpid());
sem_post(sem_B);
}
else if(i==1)
{
sem_wait(sem_B);
printf("pidB=%d\n",getpid());
sem_post(sem_C);
}
else if(i==2)
{
sem_wait(sem_C);
printf("pidC=%d\n",getpid());
sem_post(sem_A);
}
}
return 0;
}
使我个人所写可以得出结果,有改善的地方欢迎指出。