7. Apéndice A. EJEMPLOS DE PROGRAMACIÓN.

Se han realizado una serie de ejemplos con el fin de demostrar la forma de programar mediante hilos. El objetivo es demostrar que la programación mediante hilos no es mucho más difícil que la programación clásica con procesos, y además en algunos casos resulta más sencilla. También se pretende dar una visión de la programación multihilo en lenguaje C empleando el estándar POSIX 1003.1c, para lo cual se ha utilizado la implementación que de dicho estándar realiza el paquete Pthreads 1.60 beta5 de Chris Provenzano.

Los ejemplos que se abordan son ejemplos clásicos de programación concurrente, programación paralela o modelos de programación. En todos los ejemplos se ha programado una versión empleando hilos y una versión empleando procesos con objeto de presentar y comparar las diferencias entre una y otra versión. En cada ejemplo se realiza una introducción al problema explicando su problemática y forma de resolución, se presenta la solución al problema codificada en lenguaje C en dos versiones (procesos e hilos), se comparan las dos versiones y se indican las ventajas e inconvenientes de cada versión.

La instalación del paquete de ejemplos es muy sencilla :

gunzip proyecto.tar.gz

tar xvf proyecto.tar

La estructura de directorios del paquete es la siguiente :

proyecto
        |->include
        |->source
        |->libproc
        |->libpthread
        |->ejemplos
        	|->productor
        		|->philos
        		|->pproc
        	|->servidor
        		|->shilos
        		|->sproc
        	|->newton
        		|->nhilos
        		|->nproc
        	|->matriz
        		|->msec
        		|->mhilos
        		|->mproc
        	|->filosofos
        		|->fhilos
        		|->fproc



Los ejemplos se pueden encontrar en el directorio ejemplos del paquete de ejemplos. Los ejemplos se encuentran en directorios diferentes. En cada directorio existe a su vez un directorio distinto para cada una de las versiones, procesos e hilos. Los ejemplos presentados son :

También existe una biblioteca de rutinas comunes que contiene algunas funciones empleadas en diversos ejemplos.