Esercizio somma a partire da tre processi

di il
3 risposte

Esercizio somma a partire da tre processi

Salve, vorrei avere un aiuto su come svolgere questo programma in C:
Creare un array di 3 elementi
Chiedere all'utente di inserire un numero. 
Generare 3 processi. 
Ogni processo deve moltiplicare un elemento dell'array per il numero inserito dall'utente. 
Al termine, il processo padre deve sommare il risultato dei processi figli e stamparlo.

io ho provato e a me viene così:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>

int main(void) {

pid_t pid, pidwait;         //definisco, salvo la variabile pid di tipo pid_t
int status;
int array [3] = {1, 2, 3};
int a,b;
int numero_processi=0;
int sum=0;
printf("inserisci un numero\n");  
scanf("%d", &a);

while(numero_processi <3){
 pid=fork(); //si riferisce sempre al padre, perchè di volta in volta i processi figli terminano e il loro pid viene cancellato    

 if (pid<0){
   printf("ERRORE NELLA FORK");
 }

 else if (pid == 0){
 //figlio
   b=array[numero_processi]*a;
   sum=sum+b;
   printf("sono nel figlio:%d e la somma vale :%d\n",getpid(),sum);
   exit(0);

 }
 else{
   //padre
     wait(NULL);
     numero_processi++;
     printf("sono il processo padre:%d e il valore somma e':%d\n", getpid(), sum);
 }
 
 }
 return 0;
}

ma mi stampa questo:
inserisci un numero
5
sono nel figlio:146 e la somma vale :5
sono il processo padre:133 e il valore somma e':0
sono nel figlio:147 e la somma vale :10
sono il processo padre:133 e il valore somma e':0
sono nel figlio:148 e la somma vale :15
sono il processo padre:133 e il valore somma e':0

quando in realtà dovrebbe stamparmi il valore della somma, per il resto è giusto

3 Risposte

  • Re: Esercizio somma a partire da tre processi

    Nei figli non stai stampando la somma, stai facendo una moltiplicazione per la copia di numero_processi, la cui variabile originale viene correttamente incrementata dal padre ogni volta prima del fork()

    Le sum sono variabili differenti: il padre non la incrementa mai e giustamente hai zero. Quando fai fork() viene copiato tutto comprese le variabili al valore di quel momento, ma dopo ogni processo va per fatti suoi e usa le sue variabili. Devi studiare levariabili condivise o la comunicazione tra processi

  • Re: Esercizio somma a partire da tre processi

    Ok grazie, ma quale sarebbe la maniera più semplice per risolvere questo problema, senza andare ad inserire altre librerie, e pipe?

  • Re: Esercizio somma a partire da tre processi

    Non è un esercizio per imparare la pipe?

Devi accedere o registrarti per scrivere nel forum
3 risposte