pthreads

Páginas: 6 (1395 palabras) Publicado: 10 de julio de 2014
Programación en POSIX Threads (Pthreads)
Victor J. Sosa Sosa

1. Programación en POSIX Threads (Pthreads)
1.1. Introducción
La biblioteca de pthreads es una biblioteca que cumple los estándares POSIX y que
nos permite trabajar con distintos hilos de ejecución (threads) al mismo tiempo.
La diferencia entre un thread y un proceso es que los procesos no comparten memoria
entre sí, a no serque se haya declarado explícitamente usando alguno de los
mecanismos de IPC (InterProcess Communication) de Unix, mientras que los threads
sí que comparten totalmente la memoria entre ellos. Además, para crear threads se
usan las funciones de la biblioteca pthread o de cualquier otra que soporte threads
mientras que para crear procesos usaremos la llamada al sistema fork(), que se
encuentra entodos los sistemas unix.
Ya que pthreads es una biblioteca POSIX, se podrán portar los programas hechos con
ella a cualquier sistema operativo POSIX que soporte threads. Ejemplos de ello son
IRIX, los unix'es de BSD, Digital Unix OSF/1, etc.

1.2. 1.2. Como compilar un programa con pthreads
Para crear programas que hagan uso de la biblioteca pthreads necesitamos, en primer
lugar, labiblioteca en sí. Ésta viene en la mayoría de distribuciones linux, y
seguramente se instale al mismo tiempo que los paquetes incluidos para el desarrollo
de aplicaciones (es decir, cuando instalamos la libc o algún paquete tipo libc-devel)
Si no es así, o usas un sistema que no sea linux, la biblioteca no debería ser muy
difícil de encontrar en la red, porque es bastante conocida y se suele usarbastante.
Una vez tenemos la biblioteca instalada, deberemos compilar el programa y “linkarlo”
con la biblioteca dependiendo del compilador que estemos usando.
La forma más usual de hacer esto es, si estamos usando como compilador GNU gcc
con el comando:
gcc programa_con_pthreads.c -o programa_con_pthreads -lpthread
Si por el contrario no estamos usando el compilador de GNU, lo mejor será quemiremos la página man del compilador de C instalado en el sistema. Por ejemplo, en el
caso del compilador de Digital para OSF/1, éste tiene un parámetro especial para
compilar con pthreads:
cc programa_con_pthreads.c -o programa_con_pthreads -pthread
Como verás la sintaxis no es muy diferente pero el compilador de Digital no aceptará
la de gcc y viceversa.

1.3. 1.3. Creación ymanipulación de threads
Para crear un thread nos valdremos de la función pthread_create de la biblioteca y
de la estructura de datos pthread_t que identifica cada thread diferenciándolo de los
demás y que contiene todos sus datos.
El prototipo de la función es el siguiente:
int
pthread_create(pthread_t
*
thread, pthread_attr_t *attr,
void * (*start_routine)(void *), void *arg)


thread: Es unavariable del tipo pthread_t que contendrá los datos del thread y
que nos servirá para identificar el thread en concreto cuando nos interese
hacer llamadas a la biblioteca para llevar a cabo alguna acción sobre él.










attr: Es un parámetro del tipo pthread_attr_t y que se debe inicializar
previamente con los atributos que queramos que tenga el thread. Entre los
atributoshay la prioridad, el quantum, el algoritmo de planificación que
queramos usar, etc. Si pasamos como parámetro aquí NULL, la biblioteca le
asignará al thread unos atributos por defecto (RECOMENDADO).
start_routine: Aquí pondremos la dirección de la función que queremos que
ejecute el thread. La función debe devolver un puntero genérico (void *) como
resultado, y debe tener como único parámetrootro puntero genérico.
La ventaja de que estos dos punteros sean genéricos es que podremos
devolver cualquier cosa que se nos ocurra mediante los castings de tipos
necesarios.
Si necesitamos pasar o devolver más de un parámetro a la vez, se puede crear
una estructura y meter allí dentro todo lo que necesitemos. Luego pasaremos o
devolveremos la dirección de esta estructura como único...
Leer documento completo

Regístrate para leer el documento completo.

Estos documentos también te pueden resultar útiles

  • Programación en posix threads (pthreads)

Conviértase en miembro formal de Buenas Tareas

INSCRÍBETE - ES GRATIS