#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<semaphore.h>
#include<fcntl.h>
#include<sys/types.h>
#include<sys/wait.h>
int process3(int i);
int process2(int i);
int process1(int i);
sem_t sem1;
sem_t sem2;
sem_t sem3;
int main(int argc, char *argv[])
{
int pid1,pid2,value,i=0;
sem_init(&sem1, 1, 0);
sem_init(&sem2, 1, 1);
sem_init(&sem3, 1, 0);
value=atoi(argv[1]);
pid1=fork();
if(pid1==0)
{
pid2=fork();
}
while(i<=value)
{
if(pid2==0)
{
sem_wait(&sem2);
process3(i);
sem_post(&sem1);
}
if(pid1==0&&pid2>0)
{
sem_wait(&sem3);
process2(i);
sem_post(&sem2);
}
if(pid1>0)
{
sem_wait(&sem1);
process1(i);
sem_post(&sem3);
}
i++;
}
return 0;
}
int process3(int i)
{
if(i%3==0)
{
printf("%d\n",i);
}
}
int process2(int i)
{
if((i+1)%3==0)
{
printf("%d\n",i);
}
}
int process1(int i)
{
if((i+2)%3==0)
{
printf("%d\n",i);
}
}
预期错误是:0,1,2,3,.... maxnum与输出命令一起给出。 得到输出: 0 我的代码的目的是创建两个子进程并以递增的顺序打印数字。但是如上所示获得意外的输出。 有人可以帮我吗?