Hilos

Solo disponible en BuenasTareas
  • Páginas : 7 (1556 palabras )
  • Descarga(s) : 0
  • Publicado : 30 de agosto de 2010
Leer documento completo
Vista previa del texto
HILOS

1. OBJETIVO

El objetivo es estudiar los mecanismos para la creación y destrucción de hilos (procesos ligeros) de un mismo proceso, así como la sincronización entre éstos mediante mutex y variables condicionales.

2. DESCRIPCIÓN

Los servicios para la utilización de proceso ligeros (hilos) se pueden agrupar de la siguiente forma:

• Servicios para la gestión de atributos de unproceso ligero.
• Creación e identificación de procesos ligeros.
• Terminación de procesos ligeros.
• Sincronización entre procesos ligeros de un mismo proceso.

2.1 SERVICIOS PARA LA GESTIÓN DE ATRIBUTOS DE UN PROCESO LIGERO

Cuando se crea un hilo, si no se le pasa un objeto del tipo atributo, se crea con los atributos por defecto. Si se quiere crear un hilo con otros valores para estosatributos (distintos a los de por defecto), previamente se debe tener un objeto atributo (donde se almacenan los valores de los diferentes atributos), inicializarlo, darle los valores apropiados, y pasárselo a la función que crea el hilo. Los atributos se almacenan en un objeto atributo de tipo pthread_attr_t. A continuación se describen los principales servicios relacionados con los atributos deun proceso ligero.

Creación y destrucción de atributos:

Para la creación y el inicio de un objeto atributo (utilizado en la creación de un proceso ligero) se utiliza la siguiente función:

int pthread_attr_init(pthread_attr_t *attr);

Para la destrucción del objeto de tipo atributo se utiliza:

int pthread_attr_destroy(pthread_attr_t *attr);

Establecimiento y obtención del estado determinación:

El servicio para el establecimiento (set) del atributo correspondiente al estado de terminación es:

int pthread_attr_setdetachstate(pthread_attr_t *attr,
int detachstate);

El valor del argumento detachstate puede ser:
• PTHREAD_CREATE_DETACHED: El proceso ligero que se cree con este estado de terminación se considerará independiente y liberará sus recursos cuandofinalice su ejecución.
• PTHREAD_CREATE_JOINABLE: El proceso ligero que se cree con este estado de terminación se considerará como no independiente y no liberará sus recursos cuando finalice su ejecución. En este caso, es necesario que otro proceso espere por su finalización utilizando pthread_join.

El servicio para la obtención (get) del atributo correspondiente al estado de terminación es elsiguiente:

int pthread_attr_getdetachstate(pthread_attr_t *attr,
int *detachstate);

Establecimiento y obtención del tamaño de la pila:

Cada hilo tiene una pila cuyo tamaño se puede establecer en el momento de la creación, dándole al atributo que se va a utilizar en la creación el valor adecuado. Esto se hace mediante el servicio:

int pthread_attr_setstacksize (pthread_attr_t *attr,
intstacksize);

El servicio para obtener el tamaño de la pila es el siguiente:

int pthread_attr_getstacksize (pthread_attr_t *attr,
int *stacksize);

2.2 CREACIÓN E IDENTIFICACIÓN DE PROCESOS LIGEROS

Para crear un proceso ligero que ejecuta una determinada función se utiliza el siguiente servicio:

int pthread_create(pthread_t *thread, pthread_attr_t *attr,
void *(*start_routine)(void *), void *arg);

El primer argumento debe ser la dirección de memoria de una variable (o memoria reservada) donde esta función almacenará el identificador del hilo que se crea, y este argumento es del tipo puntero a pthread_t. El segundo argumento especifica los atributos de ejecución asociados al nuevo proceso ligero. Si este argumento es NULL se tomarán los atributos por defecto, queincluyen la creación del proceso como no independiente (JOINABLE). El tercer argumento indica el nombre de la función a ejecutar cuando el proceso ligero comienza su ejecución. Esta función requiere un solo parámetro que se especifica con el cuarto argumento, arg.

Para obtener el identificador de un hilo se utiliza el servicio:

pthread_t pthread_self(void);

2.3 TERMINACIÓN DE PROCESOS...
tracking img