C pthread_mutex_lock Uso de la función

C pthread_mutex_lock Uso de la función
Como su nombre sugiere, la función "pthread_mutex_lock" debe usarse para bloquear algo. A la Biblioteca POSIX de C surgió esta función para bloquear un hilo específico que puede usarse como un recurso compartido para alguna otra función en un programa. Es necesario evitar el punto muerto mientras se ejecuta cuando dos o más funciones usan el mismo hilo que su recurso para completar la ejecución. Por lo tanto, discutiremos el uso de la función "pthread_mutex_lock" de la biblioteca C Posix en el Ubuntu 20.04 sistema.

Ejemplo 01:

Comencemos con el primer ejemplo para ver la función mutex_lock () de POSIX en el código C. Hemos comenzado con la creación de archivos con la instrucción "táctil" de Ubuntu en su shell. Este archivo recién generado se puede encontrar en su carpeta de inicio de Linux. Para agregar el código en este archivo, debe abrirlo dentro de algún editor de Ubuntu I.mi., texto, nano o vim. Estamos usando el editor nano aquí para nuestra creación de código. Ambos comandos se enumeran en la imagen.

Estamos comenzando nuestro código C con algunos encabezados C. Estos paquetes de encabezado incluyen el uso de la entrada estándar para el código, las bibliotecas estándar, los encabezados de cadena y la biblioteca de subprocesos de Posix. Hemos inicializado un objeto de hilo Posix "th" de tamaño 3 i.mi. creará solo 3 hilos usando IDS.

Después de esto, las variables de tipo entero se declaran i.mi., "Yo" y cuento ". La variable "I" se inicializa a 0. Aquí viene la variable pthread_mutex_t para declarar el "bloqueo" para un hilo. Aunque, la ejecución comienza desde el método Main () Tenemos que mirar primero la función de subproceso. Esta función se llama como la sección crítica de nuestro código debido a la función "mutex_lock". Al inicio de la función de subproceso, la función pthread_mutex_lock está utilizando la variable de bloqueo para bloquear el hilo particular usando su "id" aprobada por la función main () pthread_create ().

Ahora, ningún otro hilo puede usar este hilo hasta que este hilo esté desbloqueado. Entonces, continuará procesando. La variable de tipo largo "I" se inicializa a 0 para usar en el bucle "para". La variable de "recuento" ha sido incrementada por 1. La variable de recuento se usa dentro de la instrucción de impresión para informarnos que el "hilo1" se inicia ahora. Para "bucle" se inicializará aquí para dar un momento de descanso a la ejecución del hilo. Después de eso, la declaración de impresión nos hará saber que el hilo 1 se va a terminar.

La función pthread_mutex_unlock () se utiliza en oposición a la función pthread_mutex_lock () para desbloquear el número de subproceso 1. El control va al método main (). La función main () continúa creando la función de subproceso hasta que el recuento alcanza 3. Aquí viene el giro del método principal () después de la creación de 3 hilos, bloquear, desbloquear y salir.

La función main () se inicializa con una variable entera "err". La instrucción "if" se usa aquí para verificar si la inicialización del hilo mutex "l" fallas usando la función "pthread_mutex_init ()" de POSIX's. Si la inicialización falla, imprimirá el mensaje particular de la declaración de impresión. El bucle "while" está aquí para ver la condición i.mi. "Yo" menos de 3. Confirmará que el valor de "i" es inferior a 3 y, por lo tanto, continúa creando un hilo. Cada hilo se bloqueará cuando se llame y no se puede crear ningún otro hilo hasta entonces.

Si recibimos un error en el hilo, mostraremos ese error en el shell convirtiéndolo en cadena usando el método "Strerror". La función pthread_join () se usa para recuperar todos los recursos dados a los hilos. En lo último, la función "pthread_mutex_destroy ()" se usa para destruir el objeto de bloqueo. Nuestro programa termina aquí.

El archivo ha sido compilado y no tenemos errores. En la ejecución, la función Main () comenzó y creó un hilo 1.

Después de un tiempo, debido al bloqueo, el hilo 1 completó su ejecución y terminó. Después de eso, la función main () creó el hilo 2 y se ha iniciado.

Después de que el hilo 2 se ejecuta por completo, el bloqueo se ha finalizado y la función Main () creó un último hilo I.mi., 3rd hilo.

Después de que el tercer hilo se ejecuta por completo, el bloqueo se libera y el control se devuelve al método principal.

Ejemplo 02:

Tengamos otro ejemplo para ver el funcionamiento de la función "pthread_mutex_lock ()" de Posix's. El código se ha iniciado con los mismos archivos de encabezado.

Después de los archivos de encabezado, hemos creado una función de bloqueo mutex. Llega tres funciones. Dos funciones de hilo y 1 es la función vinculada. Thread1 y Thread2 están tomando la entrada de la función principal () I.mi. Hilo de objetos Th1 y Th2. Ambas funciones de hilo llaman al método show () y pasan dos cadenas en su parámetro. Cuando se inicia la función "Mostrar", se bloquea con el uso de la función "pthread_mutex_lock ()" utilizando el objeto de bloqueo mutex. La primera declaración de impresión es tomar el primer argumento y lo muestra. Luego, duerme por 1 segundo, y el segundo valor de argumento se mostrará a través de la cláusula de impresión. En la última línea, el bloqueo se ha lanzado utilizando la función "pthread_mutex_unlock ()" utilizando el objeto de bloqueo.

La función Main () se inicia con la creación de dos objetos para los hilos I.mi. Th1 y Th2. Dos hilos han sido creados por la función "pthread_create" pasando Th1 y Th2 en los parámetros. El bucle "while" se usa para correr y no terminar ni siquiera un segundo. Entonces, el programa continúa procesándose a sí mismo.

El código se ha compilado primero con la ayuda del compilador "GCC" en Ubuntu 20.04.

Cuando el código se ejecutó, show () método llamado usando la función Thread1 y Thread2 uno tras otro. El programa no se detuvo después de ejecutar los hilos. Entonces, tenemos que detener la ejecución con fuerza usando el atajo "Ctrl+Z".

Para evitar que su sistema realice un procesamiento sin parar, tenemos que eliminar el bucle "while" del código en el método main (). La frase de retorno 0 ha sido reemplazada con el bucle "while".

Ahora, este programa está listo para ser compilado y ejecutado. Entonces, hemos compilado este programa con un compilador "GCC". Después de eso, la ejecución ha tenido lugar. Puede ver que el programa se termina después de la ejecución de dos hilos. El hilo1 funcionó y la función show () se bloqueó mientras la ejecución. Después de la ejecución, se ha lanzado y Thread2 ha sido ejecutado. La función de "mostrar" se llama dentro y se pasa algunos parámetros. La función "show ()" se bloqueó y no se libera hasta que se haya realizado la ejecución y la función mutex_lock no se llama. Después de eso, el control se devuelve al método Main () y el programa finaliza.

Conclusión

Esto se trataba de lo que podemos hacer para que comprenda el uso de la función pthread_mutex_lock en el código C. Habíamos probado dos programas extremadamente diferentes para que sea comprensible para usted y explicamos ambos ejemplos bastante brevemente y simplemente. Somos bastante optimistas de que este artículo será excelente para cada usuario C.