Создание 3 Процессов

Тема в разделе "C и С++ FAQ", создана пользователем silverhawk90, 12 дек 2012.

  1. silverhawk90

    silverhawk90 New Member

    Регистрация:
    12 янв 2012
    Сообщения:
    2
    Симпатии:
    0
    Данная программа должна создавать 3 процесса:
    1 процесс: p1=n+2
    2 процесс: p2=k+5
    3 процесс: p3=n+k
    родитель: c=p1+p2+p3
    n и k вводятся.
    Процессы p1,p2,p3 считают правильно, но когда очередь доходит до родителя то он не правильно считает, наверное потому что он не получает значения p1,p2,p3.
    s1,s2,s3 - pid'ы потомков.
    Скажите, пожалуйста, что я неправильно написал.
    Выполняется под Unix.

    Код (C++):
    #include <stdio.h>
    #include <unistd.h>
    #include <stdlib.h>
    #include <sys/types.h>
    #include <sys/wait.h>
    void exit_failure(void)
    {
    printf("Descendant don't create!\n");
    }
    int main (void)
    {
    int k,n;
    double c,p1,p2,p3;
    printf("Enter k: ");
    scanf("%d",&k);
    printf("Enter n: ");
    scanf("%d",&n);
    pid_t s1,s2,s3;

    s1=fork();
    if(s1==0) //descendant
    {
    p1=n+2;
    printf("des1 p1=%f\n",p1);
    exit(1);
    }
    else if(s1>0) //parent
    {
    s2=fork();
    if(s2==0) //descendant2
    {
    p2=k+5;
    printf("des2 p2=%f\n",p2);
    exit(2);
    }
    else if(s2>0) //parent
    {
    s3=fork();
    if(s3==0) //descendant3
    {
    p3=n+k;
    printf("des3 p3=%f\n",p3);
    exit(3);
    }
    else if(s3>0) //parent
    {
    waitpid(s1,NULL,0);
    waitpid(s2,NULL,0);
    waitpid(s3,NULL,0);
    printf("p1=%f\n",p1);
    printf("p2=%f\n",p2);
    printf("p3=%f\n",p3);
    c=p1+p2+p3;
    printf("Summ: %f\n",c);
    exit(4);
    }
    else
    {
    atexit(&exit_failure);
    }


    }
    else
    {
    atexit(&exit_failure);
    }


    }
    else
    {
    atexit(&exit_failure);
    }

    }
     
Загрузка...

Поделиться этой страницей