Múltiples cálculos en 4 procesos usando fork()

Escriba un programa para crear 4 procesos: el proceso principal y su proceso secundario que realizan varias tareas:

  • El proceso padre cuenta la frecuencia de un número
  • 1er hijo ordena la array
  • El segundo niño encuentra el total de números pares en una array dada
  • 3er niño calcula la suma de números pares en una array

Ejemplo –

Input :  
2, 4, 6, 7, 9, 0, 1, 5, 8, 3

Output : 
Parent process :
the key to be searched is 7
the frequency of 7 is 1
1st child process :
the sorted array is
0 1 2 3 4 5 6 7 8 9 
2nd child process :
 Total even no are: 5 
3rd child process :
the sum is :45

Explicación: aquí, habíamos utilizado la función fork() para crear 4 procesos, tres procesos secundarios y uno principal. Entonces, aquí usamos dos funciones fork() que crean 4 procesos n1=fork() y n2 = fork()

  • si n1 y n2 son mayores que cero, entonces es el proceso principal el que cuenta la frecuencia de un número.
  • si n1 es igual a cero y n2 es mayor que cero, entonces es el primer proceso secundario el que ordena la array dada.
  • si n1 es mayor que cero y n2 es igual a cero, entonces es el segundo proceso secundario que encuentra el total de números pares en la array.
  • si n1 y n2 son iguales a cero, entonces el tercer hijo calcula la suma de todos los elementos en una array.

Código –

// C++ code to demonstrate the calculation
// in parent and its 3 child processes using fork()
#include <iostream>
#include <unistd.h>
  
using namespace std;
  
int main()
{
  
    int a[10] = { 2, 4, 6, 7, 9, 0, 1, 5, 8, 3 };
    int n1, n2, i, j, key, c, temp;
    n1 = fork();
    n2 = fork();
  
    // if n1 is greater than zero
    // and n2 is greater than zero
    // then parent process executes
    if (n1 > 0 && n2 > 0) {
  
        int c = 0;
        cout << "Parent process :" << endl;
  
        // key to be searched is 7
        key = 7;
        cout << "the key to be searched is " << key << endl;
  
        for (i = 0; i < 10; i++) {
  
            if (a[i] == key)
                // frequency of key
                c++;
        }
  
        cout << "the frequency of " << key << " is " << c << endl;
    }
  
    // else if n1 is zero
    // and n2 is greater than zero
    // then 1st child process executes
    else if (n1 == 0 && n2 > 0) {
  
        cout << "1st child process :" << endl;
  
        for (i = 0; i < 10; i++) {
  
            for (j = 0; j < 9; j++) {
  
                if (a[j] > a[j + 1]) {
  
                    temp = a[j];
                    a[j] = a[j + 1];
                    a[j + 1] = temp;
                }
            }
        }
  
        cout << "the sorted array is" << endl;
  
        for (i = 0; i < 10; i++) {
  
            cout << a[i] << " ";
        }
  
        cout << endl;
    }
  
    // else if n1 is greater than zero
    // and n2 is  zero
    // then 2nd child process executes
    else if (n1 > 0 && n2 == 0) {
  
        int f = 0;
        cout << "2nd child process :" << endl;
  
        for (i = 0; i < 10; i++) {
  
            // counting total even numbers
            if (a[i] % 2 == 0) {
  
                f++;
            }
        }
  
        cout << " Total even no are: " << f << " ";
        cout << endl;
    }
  
    // else if n1 is zero
    // and n2 is zero
    // then 3rd child process executes
    else if (n1 == 0 && n2 == 0) {
  
        cout << "3rd child process :" << endl;
  
        int sum = 0;
        // summing all given keys
        for (i = 0; i < 10; i++) {
  
            sum = sum + a[i];
        }
  
        cout << "the sum is :" << sum << endl;
    }
  
    return 0;
}

Producción –

Parent process :
the key to be searched is 7
the frequency of 7 is 1
1st child process :
the sorted array is
0 1 2 3 4 5 6 7 8 9 
2nd child process :
 Total even no are: 5 
3rd child process :
the sum is :45

Este artículo es una contribución de Shivani Baghel . Si le gusta GeeksforGeeks y le gustaría contribuir, también puede escribir un artículo usando contribuya.geeksforgeeks.org o envíe su artículo por correo a contribuya@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.

Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *