Семафор ждать и отправлять сообщения с помощью вилкиLinux

Ответить Пред. темаСлед. тема
Anonymous
 Семафор ждать и отправлять сообщения с помощью вилки

Сообщение Anonymous »

Мне нужно создать 5 процессов, p2-p6, и установить порядок вывода p4, p3, p5, p1, p6, p2, и хоть убей, я не могу понять, почему sem_post не вызывает семафор, чтобы перестать ждать, но, видимо, я что-то не так понимаю:

Код: Выделить всё

#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;

}

Я пытался получить выход p4, выход p3, выход p5, выход p1, выход p6, выход p2


Подробнее здесь: https://stackoverflow.com/questions/788 ... -with-fork
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Перенаправить stderr вилки socat на отдельный процесс
    Anonymous » » в форуме Linux
    0 Ответы
    34 Просмотры
    Последнее сообщение Anonymous
  • Ошибка использования вилки Groovy Fx при попытке сборки
    Anonymous » » в форуме JAVA
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous
  • Ошибка использования вилки Groovy FX при попытке сборки
    Anonymous » » в форуме JAVA
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous
  • Использование вилки и исполнения в Python
    Anonymous » » в форуме Python
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous
  • Роутер маршрутизатора NetMQ - маршрутизатор перестает отправлять сообщения и ответы на входящие сообщения с пустыми кадр
    Anonymous » » в форуме C#
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Linux»