Creación de hebras
#include <pthread.h>
int pthread_create(
pthread_t *thread, const pthread_attr_t *attr,
void *(*start_routine) (void*), void *arg
);
int pthread_attr_destory(pthread_attr_t *attr);
int pthread_attr_init(pthread_attr_t *attr);
El número máximo de hebras que se pueden crear dependerá de la implementación. Además no existe una jerarquía o dependencia entre las hebras.
Tenemos que tener en cuenta que en un sistema monoprocesador, o en el que hay más hebras que procesadores, sólo una de entre las hebras ejecutables puede estar ejecutándose, el resto deberá esperar (según la política que implantemos).
Estado ejecutable
Una hebra pasa de "lista" a "ejecución" cuando el procesador queda disponible. Del mismo modo una hebra pasa de "ejecución" a "lista" dependiendo del tipo de planificación que hayamos empleado. El cambio de una hebra por otra en el procesador se denomina "cambio de contexto" y es un proceso con una carga computacional importante.Estado bloqueado
Una hebra se encuentra en estado "bloqueado" cuando no puede continuar su ejecución hasta que ocurra "algún evento". Este estado es imprescindible para la sincronización de las hebras. Las hebras en POSIX no se pueden bloquear ellas mismas.
Terminación de hebras
void pthread_exit(void *value_ptr);
int pthread_cancel(pthread_t thread);
Una hebra termina cuando lo hace la rutina asociada a ella. Se invoca a la función pthread_exit. Para cancelarla habría que invocar a pthread_cancel.
El proceso termina llamando a exec() o exit(). Mientras que el main() termina sin llamar explícitamente a pthread_exit.
No hay comentarios:
Publicar un comentario