Programación Concurrente con Fork en Linux

Si estás leyendo este artículo es porque te interesa saber cómo funciona la función fork en C++, quiero aclarar primero que nada que esta función solo está disponible en sistemas *unix, así que si estas usando Windows deberás de usar compilación cruzada (investiga sobre cygwin). Bueno vamos a ver la definición oficial de fork según la documentación de los manuales de referencia proveídos por Linux.

La función fork crea un nuevo proceso duplicando al proceso actual que lo está llamando. Okey sé que esta definición está un poco confusa, pero vamos a explicarlo con un ejemplo, creo que todo el mundo conoce o por lo menos a escuchado o visto el ejemplo de mitosis, que es cuando las células del cuerpo se duplican de manera instantánea, incluso en las caricaturas de niños salen este tipo de escenas, bien ya que sabes lo que es una mitosis adivina que, pues fork es parecido, cuando un código se ejecuta por la computadora se le asigna un espacio de memoria donde se carga el código y se van creando las variables en tiempo de ejecución con forme el programa la necesita, este lugar es conocido como el montículo o heap en inglés. Cada proceso tiene su propio espacio de memoria y ningún otro proceso puede acceder a dichos espacios, cuando se llama a la función fork() el sistema operativo crea una copia exacta del proceso que llama a la función fork(), por ejemplo si ejecutamos nuestro programa y llamamos a fork() desde el main, el SO crea una copia idéntica de nuestro programa pero la copia será asignada como un proceso hijo de nuestro programa, por lo tanto como es un nuevo proceso este cuenta con su propio espacio de memoria y puede ejecutarse de manera independiente del programa padre, ah pero cuidado, recuerda que cuando un proceso termina su ejecución el SO se encarga de terminar a todos los procesos hijos que ha creado, ten en cuenta eso ya si llegas a mandar una carga excesiva de trabajo al proceso hijo y finalizas el proceso padre, el hijo será destruido por el SO. A continuación, te muestro un ejemplo de un ejercicio.

fork()

Instrucciones: Realizar un programa en c o c++ utilizando la función fork(); en conjunto con la función printf(); para imprimir de manera repetitiva 3 letras: A, B y C. Recordar que fork() primero ejecuta el proceso padre y luego al hijo. 


    #include <iostream>
    #include <unistd.h>

    using namespace std;

    int main()
    {
        cout << "A" << endl;
        fork();
        cout << "B" << endl;
        fork();
        cout << "C" << endl;

        return 0;
    }



Referencias Bibliográficas:

fork(2) - Linux manual page. (s. f.). Linux ManPages. https://man7.org/linux/man-pages/man2/fork.2.html

Comentarios