real time web analytics

Pthread_Function() en lenguaje C

El estándar POSIX nos da la posibilidad de desarrollar programas multihilo en lenguaje C. Esta técnica de programación consiste en utilizar la librería “pthread” para abrir uno o más subprocesos que se ejecutan en paralelo con el proceso principal.

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

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

En este artículo de Sugerencias de Linux, aprenderá a usar la función pthread_cancel(), una de las funciones de administración de subprocesos de C que le permite cancelar un subproceso que ya se está ejecutando.

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

En t pthread_cancel(subproceso pthread_t);

Descripción de la función Pthread_Cancel() en 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 un subproceso se termina 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 subproceso se pueden recuperar con la función pthread_setcancelstate() y se pueden configurar con pthread_setcanceltype().

Si la función pthread_cancel() tiene éxito, 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 encabezado “thread.h”. Para utilizar esta y otras funciones de gestión de subprocesos, debe incluir este encabezado en su programa de la siguiente manera:

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

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

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

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

Para ello, creamos el hilo “thread_1” que ejecuta la función th_function() que consiste en un bucle for de 10 ciclos, cada uno de los cuales imprime el “Segundos desde el subproceso inicial y el número de segundos transcurridos” sentencia en la consola de comandos. 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 finalizamos el subproceso después de la mitad del tiempo de ejecución. Para terminar el subproceso, 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 subproceso. Ahora, veamos el código de este ejemplo:

#incluir

#incluir

#include

#incluir

vacío * th_function (vacío * norte);

vacío principal()
{
pthread_t hilo_1;
pthread_create(&hilo_1, NULO, &th_function, NULO);
dormir(5);
pthread_cancel(hilo_1);
dormir(5);
}

/**************************************************** *****/
vacío * th_function (vacío* norte )
{
para (En t segundo =0; segundo!=10;segundo++)
{
imprimir (“Segundos desde el subproceso de inicio %i\norte, segundo);
dormir(1);
}
}

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

En este caso, el subproceso acepta la cancelación porque sus atributos se establecen de manera predeterminada en la creación al especificar un puntero NULL en los argumentos de entrada “attr” de la función pthread_create().

Errores en el Uso de la Función Pthread_Cancel(): Qué Son y Cómo Identificarlos

La forma de determinar si se produce un error al llamar a esta función es utilizar 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 que utiliza este método para la detección de errores:

si (pthread_cancel (hilo) !=0){

imprimir(“Se produjo un error al intentar cancelar el hilo especificado”);

}

El único error que puede generar esta función es el que está definido como ISRCH en la cabecera “errno.h”. Este error se genera cuando se hace referencia a un subproceso inexistente en el argumento de entrada de la función pthread_cancel().

Errores de compilación en programas con subprocesos

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

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

Estos errores muchas veces resultan en perder un tiempo valioso revisando las cabeceras que insertamos en el código, su integridad y los directorios que están asociados al compilador ya que todo indica que el problema está ahí.

Aunque las funciones que causan el error están definidas en el “pthread.h” encabezado y se incluyen en el código, el compilador no reconoce estas funciones a menos que se llame a la biblioteca pthread 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 comandos durante la compilación de programas con hilos a continuación:

~$ CCG ruta de subproceso/Nombre del archivo.C o out_name

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

Conclusión

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

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

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

Leave a Comment