HILOS EN C

download HILOS EN C

of 3

Transcript of HILOS EN C

  • INSTITUTO POLITECNICO NACIONAL ESCUELA SUPERIOR DE CMPUTO

    Luis Alfredo Snchez Angeles

    INTRODUCCIN HILOS [Estructura]

    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.

    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.

  • INSTITUTO POLITECNICO NACIONAL ESCUELA SUPERIOR DE CMPUTO

    Luis Alfredo Snchez Angeles

    Para hacer uso de estas funciones incluir , el ligado debe incluir -l thread , como en cc -o ejecutable -l thread

    fuente.c

    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 int pthread_equal(pthread_t tid1, pthread_t tid2);

    Retorna: no cero si es igual, cero en otro caso

    Compara dos identificados de hilos tid1 y tid2

    #include pthread_t pthread_self(void);

    Retorna: la ID del hilo que la llam

    Para obtener identificador de un hilo

    Los procesos normalmente corren como un hilo nico. La creacin de un nuevo hilo se logra va pthread_create.

    # include int pthread_create(pthread_t * restrict tidp, const pthread_attr_t * restrict attr, void * ( * start_routine ) (void *), void * restrict arg);

    tidp: salida, puntero a id del hilo attr: entrada, para definir atributos del hilo, null para default start_routine: entrada, funcin a correr por el hilo 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.

    Funcin POSIX Descripcin

    pthread_equal Verifica igualdad de dos identificados de hilos

    pthread_self Retorna ID de propio hilo (anlogo a getpid)

    pthread_create Crea un hilo (anlogo a fork)

    pthread_exit Termina el hilo sin terminar el proceso (anlogo a exit)

    pthread_join Espera por el trmino de un hilo (anlogo a waitpid)

    pthread_cancel Termina otro hilo (anlogo a abort)

    pthread_detach Configura liberacin de recursos cuando termina

    pthread_kill Enva una seal a un hilo

    TABLA DESCRIPTIVIA ADMINISTRACIN DE HILOS

    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:

    IDENTIFICACIN DE HILOS

    CREACIN DE HILOS

  • INSTITUTO POLITECNICO NACIONAL ESCUELA SUPERIOR DE CMPUTO

    Luis Alfredo Snchez Angeles

    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 void pthread_exit (void * rval_ptr);

    rval_ptr queda disponible para otros hilos al llamar pthread_join rval_ptr debe existir despus del trmino del hilo.

    int pthread_join(pthread_t tid, void ** rval_ptr); 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

    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 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.

    TERMINO DE UN HILO

    DESASOCIAR Y REUNION