Cómo crear hilos en C de forma fácil

Hola amigos, en este tutorial veremos cómo crear hilos en lenguaje C de una forma
fácil pero primero debemos tener en cuenta algunos puntos y es que al crear un hilo de esta manera
el control no se cede a la función principal de nuestro programa hasta que todos los hilos
levantados sean terminados.

Para qué nos sirven los hilos, pues para poder hacer varias tareas a la vez, por ejemplo, puedo
estar convirtiendo un video mientras muestro un gif animado sin que eso bloquee
el progreso normal de mi aplicación, además si tenemos un microprocesador con varios núcleos
nuestro sistema repartirá los hilos entre ellos, de manera que en el núcleo 1 puedo estar haciendo algo y en el otro otra cosa. Según recuerde esto está disponible en windows y podemos compilar el ejemplo sin cambios de un sistema a otro puesto que pthread pertenece a la especificación POSIX.

Para compilar este ejemplo cree un archivo vacio sin formato
con nombre por ejemplo hilo.c y ponga el siguiene código:

#include <stdio.h>

#include <stdlib.h>

#include <pthread.h>

static void *funcion(void *arg)
{
system(«xterm»);
}

int main()
{
pthread_t hilo;

pthread_create(&hilo, NULL, &funcion, NULL);
pthread_join(hilo, NULL);

}

Compile con gcc hilo.c -o hilo -pthread
y ejecute con ./hilo

La función que ejecuta lo que queremos en paralelo es la que empieza con static void y tiene la forma siguiente

static void *nombrefuncion(void *parmetrosApasar)

pthread_t nombreDeHilo Define NombreDeHilo como de tipo estructura pthread_t o sea es una variable que representa nuestro hilo.

pthread_create(&nombreDeHilo, NULL, &nombrefuncion, NULL) Con esto creamos el hilo, es importante tener en cuenta que en algunos micros con esta función se ejecuta de inmediato la función que contiene las acciones reales y en otros micros no se ejecuta, según la especificación de Linux de POSIX esta función es como si solo definiera que cree el hilo sin ejecutarlo(lo mas común).

pthread_join(nombreDeHilo, NULL); Con esto si que se ejecuta el hilo en paralelo al principal y espera a que termine antes de continuar con lasiguiente instrucción del main. Podríamos tener por ejemplo.

pthread_create(&pan, NULL, &picapan, NULL);
pthread_create(&guayaba, NULL, &picaguayaba, NULL);

pthread_join(pan, NULL);
pthread_join(guayaba, NULL);

crear_pan_con_timba();

De esta anera se picaría el pan y la guayaba en paralelo por personas independientes y diferentes.

Estos hilos comparten las misas variables para comunicarse, o sea ven las variables del main como globales.

Es necesario usar banderas de salida para funciones en hilos que usen bucles while que no terminan y validar si esa variables es 1 para salir del bucle. Así sabremos si ya se picó el pan y la guayaba antes de armar el pan.

Espero que les haya sido útil este tuto. Saludos.

Estos métodos de hilos son estándar y existen desde muyyy para atras y es válido a la larga, es perteneciente a un estándar, no es un invento de algún framework ni nada esto es C puro lo que soñamos muchos.

¿Te resultó interesante? Compártelo ...



haylem

Publicado por haylem

Facebook » Google+ » Forma parte de GUTL desde el 9 diciembre, 2013. Me gusta la programación y la electrónica. Me encanta el soft libre y los sistemas que enseñan a trabajar. Me gusta buscar en lo dificil y aprender cosas nuevas. Nací el 4 de Nov 1988 y vivo en el vedado.