Hilo Posix con programación C

Hilo Posix con programación C
Un hilo es una pequeña instancia que se ejecuta dentro de un proceso. Los hilos se combinan para crear un proceso, y tienen algunas propiedades del proceso; Por lo tanto, se consideran procesos livianos. El hilo no es independiente, al igual que un proceso. Más bien trabajan juntos para compilar y crear un proceso. Aún así, al igual que un proceso, un hilo también tiene su propia PC (contador de programas) y un conjunto de registros particular junto con espacio de pila.

Hilo Posix:

En las plataformas de Linux, la API estándar de PTHREAD de C ++ lenguajes C y C ++ para todo tipo de funciones relacionadas con los hilos. También se conoce como un hilo POSIX que permite a los usuarios crear muchos hilos para que fluyan los procesos simultáneos. Se usa mejor en sistemas o procesadores múltiples para implementar hilos en el núcleo para lograr el sistema.

Implementación:

Es necesario incluir este pthread.h Archivo de encabezado en el script inicialmente. Esto ayudará a usar las funciones de la biblioteca pthreads. Para ejecutar el archivo C, los siguientes comandos

$ cc -pthread archivo.C

O

$ cc -lpThread File.C

Las funciones que se definen en la biblioteca PTHREADS pueden incluir:

pthread_create:

Se usa para crear un nuevo hilo

Parámetros de pthread_create:

Tiene los siguientes parámetros:

hilo: Esto actúa como un puntero a un valor entero sin firmar. Devuelve el ID de subproceso del hilo que se forma.

Atributos: Este parámetro actúa como un puntero a una estructura. Se utiliza para definir los atributos de un hilo que puede ser la política de programación y dirección de pila, etc.

start_routine: Este parámetro es un puntero a una subrutina implementada por el hilo.

argumento: Este parámetro es un puntero a vacío con diferentes argumentos a la función predefinida al comienzo del argumento

Sintaxis:

>> int pthread_create
(pthread_t * hilo, const pthread_attributes_t * attr, void * ( * start_routine) (void *), void * argumento);

pthread_exit:

Se usa para terminar o terminar un hilo

Parámetros de pthread_exit:

El método utilizado al final del método/proceso acepta un retval de parámetros que es un indicador obligatorio para un entero. Almacena el estado del hilo de modo que el hilo termine. Debe ser una variable global. Esto permitirá que el siguiente hilo en línea se una al hilo si está disponible.

Sintaxis:

>> void pthread_exit (void *retval);

pthread_join:

Esta es una función utilizada en el momento de la espera para la terminación del hilo.

Parámetros para pthread_join:

El parámetro utilizado aquí son:

Thread_id: Es la identificación del hilo para el que espera el hilo en línea.

Thread_return: Es el parámetro que actúa como un puntero a la ubicación particular donde hemos definido el estado de salida.

Sintaxis:

>> int pthread_Join (pthread_t thread_identification, void ** thread_return);

pthread_self:

Este es un método utilizado para obtener la identificación del hilo actualmente en línea.

Sintaxis:

>> pthread_t pthread_elf (void);

pthread_equal:

Este método se utiliza para comparar en caso de que dos subprocesos sean equivalentes o no. Si dos hilos son iguales, la función devolverá un valor que no sea cero en la respuesta.

Sintaxis:

>> int pthread_equal (pthread_t thread1, pthread_t thread2);

pthread_cancel:

Este método se utiliza para enviar una solicitud de cancelación

Parámetro para pthread_cancel:

El parámetro utilizado es obligatorio que se ingrese para cancelar la solicitud.

Sintaxis:

>> int pthread_cancel (pthread_t threadname);

pthread_detach:

Este es el método que se utiliza para separar un hilo. No necesita ningún hilo para unirse a la terminación. Todos los recursos que se ejecutan en el hilo se liberan tan pronto como el hilo se separe.

Parámetro de pthread_detachr:

Es el parámetro que acepta la ID de subproceso de parámetro obligatorio. Es imprescindible para ser separado.

Sintaxis:

>> int pthread_detach (hilo pthread_t);

Código de muestra:

Aquí hay un código de ejemplo para mostrar la implementación de la función descrita anteriormente. Utilizamos un compilador GCC para compilar estas funciones.

// programa para mostrar las funciones del hilo
#incluir
#incluir
#incluir
// llamando al hilo POSIX, un imprescindible en los sistemas UNIX/Linux
pthread_t tid [2];
Función void *(void *arg)

sin firmar largo i = 0;
pthread_t id = pthread_elf ();
if (pthread_equal (id, tid [0]))
// condición para que los hilos son iguales

printf ("\ n se está procesando el primer hilo \ n");

demás

printf ("\ n Se está procesando el segundo hilo \ n");

// hilos procesados.
para (i = 0; i<(0x255);i++);
regresar nulo;

int main (nulo)

int i = 0;
en terror;
// Creando un nuevo hilo
mientras yo < 2)

error = pthread_create (& (tid [i]), nulo y function, null);
if (error != 0)
printf ("\ n no ha podido crear el hilo: [%s]", strerror (error));
demás
printf ("\ n el hilo se ha creado con éxito \ n");
// hilo creado con éxito
i ++;

dormir (5);
regresar 0;

El código está escrito en un editor de texto; Puede usar cualquier editor basado en su elección. Entonces guárdelo en su ubicación favorita.

El archivo se guarda en el sistema informático y luego se accede. El archivo guardado por nosotros fue nombrado prueba.C. Para acceder a él, escriba el siguiente comando en la ventana del terminal:

Prueba de $ sudo GCC.c -lpthread

A continuación, para ejecutar la salida, escriba el siguiente comando:

ps ./a.afuera

Rendimiento esperado:

La salida que obtuvimos en respuesta al código anterior se muestra a continuación:

Conclusión:

El tutorial cubrió el proceso básico de la creación de hilos y discutió todos los métodos comúnmente utilizados en su creación. Thread es una instancia de un proceso. Luego caminamos a los usuarios a través de los famosos parámetros utilizados por cada proceso junto con las sintaxis para que puedan usarlos en sus programas de computadora. Aquí también compartimos un código de ejemplo como muestra para comprender mejor la idea de crear un programa C en Posix. El compilador que utilizamos fue GCC en el sistema Linux. Los usuarios también pueden optar por cualquier otro compilador en función de sus preferencias.