Pthread_function en lenguaje C

Pthread_function en lenguaje C

El estándar POSIX nos brinda la posibilidad de desarrollar programas multiproceso en el idioma C. Esta técnica de programación consiste en utilizar la biblioteca "pthread" para abrir uno o más hilos de subprocesos que se ejecutan en paralelo con el proceso principal.

La implementación de hilos aporta grandes beneficios al programa final, ya que acelera los tiempos de ejecución ejecutando múltiples tareas simultáneamente, puede estar mejor estructurado y hace un mejor uso de los recursos del sistema.

Se crea un hilo con la función pthread_ create (). Una vez que se llama a esta función, el hilo comienza a funcionar en paralelo con el proceso principal. Cuando se llama a esta función, devuelve el ID de subproceso en el hilo del argumento de salida. Este identificador se utiliza para consultar el hilo creado cuando usa las funciones de administración de hilos como pthread_join () o pthread_cancel ().

En este artículo de Linux Sugerencia, aprenderá cómo usar la función pthread_cancel (), una de las funciones de gestión de hilos de C que le permite cancelar un hilo que ya se está ejecutando.

Sintaxis de la función pthread_cancel () en lenguaje C

int pthread_cancel (pthread_t hilo);

Descripción de la función pthread_cancel () en el lenguaje C

La función pthread_cancel () envía una solicitud al sistema para cancelar el hilo especificado por el identificador en su hilo de argumento de entrada.

La llamada a la función pthread_cancel () no implica la terminación inmediata del hilo, sino una solicitud para hacerlo. Si se termina un hilo después de llamar a esta función depende de los atributos que se le asignan cuando se crea. Si se crea un hilo con sus atributos predeterminados, se puede cancelar.

Los atributos de cancelación de un hilo se pueden recuperar con la función pthread_setCancelState () y se pueden configurar con pthread_setCancelType ().

Si la función pthread_cancel () es exitosa, devuelve 0 como resultado. Si falla, devuelve un valor distinto de cero.

La función pthread_cancel () de la biblioteca pthread se define en el "hilo.encabezado. Para usar esta y las otras funciones de gestión de hilos, debe incluir este encabezado en su programa de la siguiente manera:

#incluir

Los programas que usan las funciones de administración de subprocesos deben compilarse llamando a la biblioteca de subprocesos desde la línea de comandos de Linux. De lo contrario, los errores ocurrirán.

La siguiente es una sección especial que explica cómo compilar correctamente los programas que usan las funciones de la biblioteca de subprocesos.

Cómo cancelar un hilo en ejecución usando la función pthread_cancel () en el lenguaje C

En este ejemplo, creamos un hilo con la función pthread_create () y luego lo cancelamos en el medio de la ejecución con la función pthread_cancel ().

Para hacer esto, creamos el hilo "Thread_1" que ejecuta la función th_function () que consiste en un bucle para 10 ciclos, cada uno de los cuales imprime la "Segundos del hilo de inicio y el número de segundos transcurridos" oración en la consola de comando. Después de eso, se inserta un retraso de 1 segundo para repetir el ciclo nuevamente. Entonces, el tiempo de ejecución del hilo es de unos 10 segundos.

Una vez que Thread_1 se crea y se ejecuta, introducimos un retraso de 5 segundos a través de la función Main () y terminamos el subproceso después de la mitad del tiempo de ejecución. Para terminar el hilo, llamamos a la función pthread_cancel () y pasamos el identificador Thread_1 que devuelve la función pthread_create () como argumento de entrada cuando se crea el hilo. Ahora, veamos el código para este ejemplo:

#incluir
#incluir
#incluir
#incluir
void * th_function (void * n);
vacío principal()

pthread_t thread_1;
pthread_create (& thread_1, null, & th_function, null);
dormir (5);
pthread_cancel (thread_1);
dormir (5);

/****************************************************** *****/
void * th_function (void * n)

para (int sec = 0; sec!= 10; Sec ++)

printf ("segundos del hilo init %i \ n", sec);
dormir (1);

La siguiente imagen muestra la compilación y ejecución del código. Como puede ver, el hilo se termina con la función pthread_cancel () en el medio de la ejecución o 5 segundos después del inicio:

En este caso, el hilo acepta la cancelación porque sus atributos están establecidos en la creación predeterminados especificando un puntero nulo en los argumentos de entrada "attr" de la función pthread_create ().

Errores en el uso de la función pthread_cancel (): ¿Qué son ellos y cómo identificarlos?

La forma de determinar si se produce un error al llamar a esta función es usar una condición "si" donde la condición de entrada es un resultado de retorno distinto de cero. El siguiente es un fragmento de código utilizando este método para la detección de errores:

if (pthread_cancel (hilo) != 0)
printf ("Se produjo un error intentando cancelar el hilo especificado");

El único error que puede generar esta función es el que se define como ISRCH en "ERRNO.encabezado. Este error se genera cuando se hace referencia a un hilo inexistente en el argumento de entrada de la función pthread_cancel ().

Errores de compilación en programas con hilos

Al compilar los programas GCC que usan subprocesos, la compilación puede fallar si no se realiza correctamente desde la línea de comando.

El mensaje de error más común emitido por el compilador establece que una de las funciones de hilo a las que nos referimos en el código no está definida.

Estos errores a menudo resultan en perder un tiempo valioso al verificar los encabezados que insertamos en el código, su integridad y los directorios asociados con el compilador, ya que todo indica que el problema está ahí está ahí.

Aunque las funciones que causan el error se definen en el "Pthread.H " encabezado y están incluidos en el código, el compilador no reconoce estas funciones a menos que la biblioteca pthread se llame desde la línea de comando durante la compilación.

Puede ver en verde la forma correcta de llamar a la biblioteca pthread desde la consola de comando durante la compilación de programas con hilos a continuación:

~ $ gcc -pthread ruta/nombre de archivo.c -o out_name

Como podemos ver en la siguiente figura, el error desaparece cuando se llama a la biblioteca PTHREAD durante la compilación:

Conclusión

En este artículo de Linux Sugerencia, le mostramos cómo usar la función pthread_cancel () para pedirle al sistema que termine un hilo en ejecución.

Observamos una descripción teórica de esta función y le mostramos su sintaxis, los argumentos de entrada y salida, y el tipo de datos que cada uno de ellos acepta. Después de eso, implementamos lo que aprendimos a través de un ejemplo práctico con fragmentos e imágenes de código donde hemos visto cómo funciona la función pthread_cancel () en el idioma C.

También agregamos una sección especial en la que le mostramos cómo compilar correctamente los programas que contienen los hilos y funciones de la biblioteca pthread.