Introducción a los hilos con la librería glib
Esta receta prentede ser una introducción a los hilos utilizando la librería glib.
¿Qué es un hilo?
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.¿Qué es glib?
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.Un ejemplo sencillo de programa en C++ que crea dos hilos
#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);
}
Resultados que deberás obtener
esta es la funcion de prueba
mensaje mensaje_1
esta es la funcion de prueba
mensaje mensaje_2
esta es la funcion de prueba
esta es la funcion de prueba
mensaje mensaje_1
mensaje mensaje_2
Referencias
Manual de glib Documentos glib Blog de greenbite [ show comments ]
blog comments powered by Disqus