Vous êtes sur la page 1sur 3

INSTITUTO POLITECNICO NACIONAL ESCUELA SUPERIOR DE CMPUTO

INTRODUCCIN
Un proceso tpico de Unix puede ser visto como un nico hilo de control: cada proceso hace slo una cosa a la vez. Con mltiples hilos de control podemos hace ms de una cosa a la vez cuando cada hilo de hace cargo de una tarea. Se puede manejar eventos asncronos asignando un hilo a cada tipo de evento. Luego cada hilo maneja sus eventos en forma sincrnica. Los hilos de un proceso comparten el mismo espacio de direcciones y descriptores de archivos. Procesos con mltiples tareas independientes pueden terminar antes si estas tareas se desarrollan traslapadamente en hilos separados. De este modo tiempos de espera de la primera tarea no retrasan la segunda. Programas interactivos pueden lograr mejor tiempo de respuesta usando hilos para manejar la entrada y salida. Este es un ejemplo del punto previo. La creacin de un hilo es mucho ms rpida y toma menos recursos que la creacin de un proceso.

HILOS [Estructura]
Un hilo contiene la informacin necesaria para representar un contexto de aplicacin dentro de un proceso ID del hilo. No son nicos dentro del sistema, slo tienen sentido en el contexto de cada proceso. Stack pointer Un conjunto de registros Propiedades de itineracin (como poltica y prioridad) Conjunto de seales pendientes y bloquedas. Datos especficos del hilo.

Luis Alfredo Snchez Angeles

INSTITUTO POLITECNICO NACIONAL ESCUELA SUPERIOR DE CMPUTO

ADMINISTRACIN DE HILOS
Funcin POSIX Un paquete de manejo de hilos generalmente incluye funciones para: crear y destruir un hilo, itineracin, forzar exclusin mutua y espera condicionada. Los hilos de un proceso comparten variables globales, descriptores de archivos abiertos, y puede cooperar o interferir con otros hilos. Todas las funciones de hilos del POSIX comienzan con pthread. Entre ellas estn: pthread_equal pthread_self pthread_create pthread_exit pthread_join pthread_cancel pthread_detach pthread_kill

TABLA DESCRIPTIVIA
Descripcin Verifica igualdad de dos identificados de hilos Retorna ID de propio hilo (anlogo a getpid) Crea un hilo (anlogo a fork) Termina el hilo sin terminar el proceso (anlogo a exit) Espera por el trmino de un hilo (anlogo a waitpid) Termina otro hilo (anlogo a abort) Configura liberacin de recursos cuando termina Enva una seal a un hilo

Para hacer uso de estas funciones incluir <pthread.h>, el ligado debe incluir fuente.c

-l thread , como en cc -o ejecutable -l thread

IDENTIFICACIN DE HILOS
As como un proceso tiene un PID (Process Identification), cada hilo tiene un identificador de hilo. Mientras los PID son enteros no negativos, el ID de un hilo es dependiente del SO y puede ser una estructura. Por esto para su comparacin se usa una funcin. #include <pthread.h> Compara dos identificados de hilos tid1 y tid2 int pthread_equal(pthread_t tid1, pthread_t tid2); Retorna: no cero si es igual, cero en otro caso #include <pthread.h> Para obtener identificador de un hilo pthread_t pthread_self(void); Retorna: la ID del hilo que la llam

CREACIN DE HILOS
Los procesos normalmente corren como un hilo nico. La creacin de un nuevo hilo se logra va pthread_create. # include <pthread.h> int pthread_create(pthread_t * restrict tidp, tidp: salida, puntero a id del hilo const pthread_attr_t * restrict attr, attr: entrada, para definir atributos del hilo, null para default void * ( * start_routine ) (void *), start_routine: entrada, funcin a correr por el hilo void * restrict arg); arg: entrada, argumento de la funcin del hilo. La funcin debe retornar un * void, el cual es interpretado como el estatus de trmino por pthread_join Nota: restrict es una palabra reservada para sealar al compilador que el dato referenciado slo ser accedido en la funcin a travs de ese puntero. Esto permite al compilador hacer optimizacin. Ejemplo: Impresin de thread ID. Puede bajar todos los fuentes del texto gua, una mirada al Makefile es educativa, se aprende a crear una biblioteca, y cmo generar una compilacin parametrizada por la plataforma en que usted trabaje. Notar: El hilo principal debe dormir para asegurar que el hilo logre hacer su parte. El hilo nuevo debe llamar a pthread_self() porque no hay garanta que el valor pasado por el hilo principal lo tenga. Todo esto por desconocer qu hilo corre primero.

Luis Alfredo Snchez Angeles

INSTITUTO POLITECNICO NACIONAL ESCUELA SUPERIOR DE CMPUTO

TERMINO DE UN HILO
Si un hilo invoca a exit, _Exit o _exit, todo el proceso terminar. Un hilo puede terminar de tres maneras sin terminar el proceso: Retornando de su rutina de inicio, cancelado por otro hilo del mismo proceso, o llamando pthread_exit. #include <pthread.h> void pthread_exit (void * rval_ptr); int pthread_join(pthread_t tid, void ** rval_ptr); rval_ptr queda disponible para otros hilos al llamar pthread_join rval_ptr debe existir despus del trmino del hilo. El hilo llamante se bloquea hasta el trmino del hilo indicado. Si el hilo en cuestin es cancelado, rval_prt toma el valor PTHREAD_CANCELED Si no estamos interesados en el valor retornado, poner NULL. int pthread_cancel(pthread_t tid); Permite a un hilo cancelar otro hilo del mismo proceso. Retorno 0 es OK, !=0 => error. Equivale a si el hilo indicado llamara pthread_exit(PTHREAD_CANCELED); sin embargo, un hilo puede ignorar este requerimiento o controlar cmo se cancela. pthread_cancel slo hace un requerimiento, pero no lo fuerza. int pthread_setcacelstate(int state, int * oldstate); Permite cambiar el estado del hilo a PTHREAD_CANCEL_ENABLE (default) o PTHREAD_CANCEL_DISABLE, en este estado el hilo ignora llamados a pthread_cancel que le afecten. Ejemplos: Recuperando el estatus de trmino de hilos: exitstatus.c No debemos usar variables automticas (aquellas en stack) como en pthread_exit, ver badexit2.c

DESASOCIAR Y REUNION
Todo hilo ocupa recursos del SO para su operacin. Entre ellos se encuentra el estatus de trmino el cual es retenido hasta el llamado a pthread_join; sin embargo, los recursos ocupados por un hilo pueden ser retornados inmediatamente despus que ste termina si llamamos a pthread_detach. En este caso un llamado a pthread_join fallar y retornar EINVAL. #include <pthread.h> int pthread_detach(pthread_t tid); retorna 0 es OK, !=0 => error. al trmino del hilo con tid, sus recursos sern retornados y llamados a pthread_join arrojan error.

Luis Alfredo Snchez Angeles

Vous aimerez peut-être aussi