Код: Выделить всё
#include
#include
#include
#include
#include
#include
#include
int main(){
pid_t p2, p3, p4, p5, p6;
sem_t sem_p1, sem_p2, sem_p3, sem_p4, sem_p5, sem_p6;
sem_init(&sem_p1, 0, 0);
sem_init(&sem_p2, 0, 0);
sem_init(&sem_p3, 0, 0);
sem_init(&sem_p4, 0, 0);
sem_init(&sem_p5, 0, 0);
sem_init(&sem_p6, 0, 0);
p2 = fork();
if(p2 < 0){
perror("fork p1 -> p2 failed");
return 1;
}
if(p2 == 0){
printf("hi");
sem_wait(&sem_p2);
printf("p2 output");
return 0;
}
p3 = fork();
if(p3 < 0){
perror("fork p1 -> p3 failed");
return 1;
}
if(p3 == 0){
sem_wait(&sem_p3);
printf("p3 output");
sem_post(&sem_p5);
return 0;
}
p4 = fork();
if(p4 < 0){
perror("fork p1 -> p4 failed");
return 1;
}
if(p4 == 0){
sem_wait(&sem_p4);
printf("p4 output");
sem_post(&sem_p3);
return 0;
}
p5 = fork();
if(p5 < 0){
perror("fork p1 -> p5 failed");
return 1;
}
if(p5 == 0){
sem_wait(&sem_p5);
printf("p5 output");
sem_post(&sem_p1);
return 0;
}
p6 = fork();
if(p6 < 0){
perror("fork p1 -> p6 failed");
return 1;
}
if(p6 == 0){
sem_wait(&sem_p6);
printf("p6 output");
sem_post(&sem_p2);
return 0;
}
sem_post(&sem_p4);
sem_wait(&sem_p1);
printf("p1 output");
sem_post(&sem_p6);
return 0;
}
Подробнее здесь: https://stackoverflow.com/questions/788 ... -with-fork