miércoles, 30 de marzo de 2016

Thread en lenguaje C sobre entorno linux - Creación de un hilo

Thread Creation - Creación de un hilo
Cada hilo en un proceso se identifica mediante un ID de hilo. Cuando se hace referencia a los ID de hebra en los programas de C o C ++, se utiliza el tipo pthread_t.

Tras su creación, cada hilo realiza una función.Este es sólo una función ordinaria y contiene el código que el hilo debe ejecutar. Cuando la función devuelve, el hilo termina. En GNU / Linux, las funciones de hilos toman un único parámetro, de tipo void*, y tienen un tipo de retorno void *.


El parámetro es el argumento de hilo:
GNU / Linux pasa el valor a lo largo del hilo sin mirarlo.Su programa puede utilizar este parámetro para pasar los datos a un nuevo hilo. Del mismo modo, el programa puede utilizar el valor de retorno de pasar los datos a partir de un tema existente de vuelta a su creador.

La función pthread_create crea un nuevo hilo.Y usted le proporciona lo siguiente:
  1. Un puntero a una variable pthread_t, en el que el ID del hilo del nuevo hilo es almacenado. 
  2. Un puntero a un objeto de atributo hilo.Este objeto controla los detalles de cómo el hilo interactúa con el resto del programa. Si pasa NULL como el atributo de hilo, un hilo se creará con los atributos de hilo por defecto.Esto se discutiría mas adelante. 
  3. Un puntero a la función del hilo. Este es un puntero de función ordinaria, de este tipo:    void* (*) (void*)
  4. Un valor del argumento de hilo de tipo void *. Este pasa simplemente como argumento a la función del hilo cuando el hilo comienza a ejecutar.
Una llamada a pthread_create retorna inmediatamente, y el hilo original continúa ejecutando las instrucciones después de la llamada. Mientras tanto, el nuevo hilo comienza a ejecutar la función del hilo. Y los horarios de los dos hilos de Linux trabajan de forma asíncrona, y su programa no deben confiar en el orden relativo en el que las instrucciones se ejecutan en los dos hilos.
El siguiente programa crea un hilo que imprime x de forma continua en el error estándar. Después de llamar a pthread_create, el hilo principal o imprime de forma continua en el error estándar.

 Ejemplo:
#include <pthread.h>
#include <stdio.h>
/* Imprime x como salida de error. El parámetro no se utiliza. No retorna. */
void* print_xs (void* unused)
{
while (1)
fputc ('x', stderr);
return NULL;
}
/* El inicio del programa */
int main ()
{
pthread_t thread_id;
/* Crea un nuevo Hilo. El nuevo hilo se ejecutará la función print_xs. */
pthread_create (&thread_id, NULL, &print_xs, NULL);
/* Imprimir de forma continua 'o' como salida estándar de errores. */
while (1)
fputc ('o', stderr);
return 0;
}
compilar y enlazar este programa mediante el siguiente codigo:
gcc nombre.c -o nombre -lpthread

intente ejecutarlo para que pasa. Observe el patron impredecible de las x's y las o's como linux alterna horarios de los hilos. 

En circunstancias normales, un hilo sale de una de dos maneras. Una forma, como se ilustra anteriormente, es mediante la devolución de la función del hilo. 
El valor de retorno de la función del hilo se toma como el valor de retorno del hilo. Alternativamente, un hilo puede salir de forma explícita llamando pthread_exit.
Esta función puede ser llamado desde dentro de la función del hilo o de alguna otra función de llamada directa o indirectamente por la función de hilo.El argumento para pthread_exit es el valor de retorno hilo.

No hay comentarios.:

Publicar un comentario