Esta receta prentede ser una introducción a los hilos utilizando la librería glib.
Un hilo de ejecución es una característica que permite a una aplicación realizar varias tareas concurrentemente. Los distintos hilos de ejecución comparten una serie de recursos tales como el espacio de memoria, los archivos abiertos, situación de autenticación, etc. Esta técnica permite simplificar el diseño de una aplicación que debe llevar a cabo distintas funciones simultáneamente, por ejemplo si programamos videojuegos podemos tener un hilo para la Inteligencia Artificial, otro para la física y otro para el renderizado de los gráficos, pero todos ellos se ejecutarán de manera paralela.
La librería glib es una de las más importantes que existen en GNOME. Dentro de glib está implementada una serie de tipos de datos que nos hace más fácil, si cabe, el tratamiento de los datos y además tiene la propiedad de mejorar la portabilidad de nuestros programas.
#include <cstdlib> #include <iostream> #include <glib.h> GThreadFunc funcion_de_prueba(char *cadena); int main(int argc, char *argv[]) { char *mensaje1 = "mensaje_1"; char *mensaje2 = "mensaje_2"; //inicializamos el soporte para hilos en glib if (!g_thread_supported ()) g_thread_init (NULL); //reservamos memoria para los hilos de manera dinámica GThread *productor = (GThread *) malloc(sizeof(GThread)); GThread *consumidor = (GThread *) malloc(sizeof(GThread)); //creamos los hilos productor = g_thread_create( (GThreadFunc)funcion_de_prueba,(char *)mensaje1 ,TRUE,NULL); consumidor = g_thread_create( (GThreadFunc)funcion_de_prueba, (char *)mensaje2 ,TRUE,NULL); //destruimos los hilos g_thread_join(productor); g_thread_join(consumidor); //liberamos memoria free(productor); free(consumidor); return 0; } //esta es la función que es llamada por los hilos GThreadFunc funcion_de_prueba(char *cadena){ printf("esta es la funcion de prueba\n"); printf("mensaje %s\n", cadena); }
esta es la funcion de prueba
mensaje mensaje_1
esta es la funcion de prueba
mensaje mensaje_2
o bien
esta es la funcion de prueba
esta es la funcion de prueba
mensaje mensaje_1
mensaje mensaje_2
Comments
Según...
el manual de referencia de Glib, al invocar la función g_thread_join():
[…] All resources of thread including the GThread struct are released. […]
Yo diría que los
free()y sobre todo losmalloc()sobran.No soy portavoz de ningún colectivo, grupo o facción. Mi opinión es personal e intransferible.