Lock C ++ Mutex

Lock C ++ Mutex

Se sabe que C ++ es uno de los lenguajes de programación más rápidos con buen rendimiento, alta precisión y un sistema de gestión de memoria adecuado. Este lenguaje de programación también admite la ejecución concurrente de múltiples hilos con el intercambio de múltiples recursos entre ellos. En la lectura múltiple, el hilo es solo para realizar la operación de lectura que no tiene problemas, ya que el hilo no se ve afectado por lo que los otros hilos están haciendo en ese momento. Pero si estos hilos tenían que compartir los recursos entre ellos, un hilo puede modificar los datos en ese momento, lo que hace que el problema. Para abordar este problema, tenemos el "mutex" de C ++ que evita el acceso de múltiples recursos hacia nuestro código/objeto al proporcionar la sincronización que establece que el acceso al objeto/código se puede proporcionar a un solo hilo al mismo tiempo, para que múltiples hilos no pudieran acceder a ese objeto simultáneamente.

Procedimiento:

Llegaremos a saber cómo podemos detener el acceso de múltiples hilos a un objeto en una sola vez usando mutex Lock. Hablaremos sobre la sintaxis del bloqueo mutex, qué es múltiples roscas y cómo podemos lidiar con los problemas causados ​​por múltiples roscas utilizando el bloqueo mutex. Luego, tomaremos un ejemplo de los múltiples roscas e implementaremos el bloqueo mutex en ellos.

Sintaxis:

Si queremos aprender cómo podemos implementar el bloqueo mutex para que podamos evitar el acceso de múltiples hilos simultáneamente hacia nuestro objeto o código, podemos usar la siguiente sintaxis:

$ std :: mutex mut_x
$ MUT_X. cerrar ();
Vacío func_name ()
$ // código que queremos ocultar de los múltiples hilos se escribiría aquí
$ MUT_X. desbloqueos ();

Ahora usaremos esta sintaxis en el ejemplo ficticio y en el código pseudo (que no podemos simplemente ejecutar como está en el editor de códigos) para hacerle saber cómo podemos usar esta sintaxis como se menciona en lo siguiente:

$ std :: mutex mut_x
Bloque nulo ()
$ MUT_X. cerrar ();
$ std :: cout << “hello”;
$ MUT_X. desbloqueos ();

Ejemplo:

En este ejemplo, intentemos crear primero la operación multiproceso y luego rodear esta operación con bloqueo mutex y desbloquear para proporcionar la sincronización de la operación al código u objeto creado. Mutex trata con condiciones de carrera que son los valores que son bastante impredecibles y dependen del cambio de hilos que son conscientes del tiempo. Para implementar el ejemplo de mutex, primero debemos importar las bibliotecas importantes y requeridas de los repositorios. Las bibliotecas requeridas son:

$ # incluir
$ # incluir
$ # incluir

La biblioteca "IOSTREAM" nos proporciona una función para mostrar los datos como cout, leer los datos como CIN y terminar la declaración como EndL. Utilizamos la biblioteca de "hilo" para utilizar los programas o funciones de los hilos. La biblioteca "mutex" nos permite implementar tanto el bloqueo mutex como desbloquear en el código. Usamos el "# incluir" porque esto permite todos los programas relacionados con la biblioteca incluidos en el código.

Ahora, después de que se realiza el paso anterior, definimos la clase Mutex o una variable global para el Mutex usando el STD. Luego, creamos una función para el bloqueo mutex y desbloqueamos que podríamos llamar después en el código. En este ejemplo, nombramos esta función como bloque. En el cuerpo de la función de bloque, primero llamamos al "mutex.bloquear () "y comenzar a escribir la lógica del código.

El mutex.bloquear () niega el acceso de los otros hilos para llegar a nuestro objeto o código creado para que solo un hilo pueda leer nuestro objeto a la vez. En la lógica, ejecutamos un bucle for que se ejecute en el índice de 0 a 9. Mostramos los valores en el bucle. Una vez que esta lógica se crea en el bloqueo mutex después de que se realiza su operación o después de salir de la lógica, llamamos al "mutex.método desbloquear () ". Esta llamada de método nos permite desbloquear el objeto creado desde el bloqueo mutex ya que el acceso del objeto a un solo hilo se proporcionó anteriormente y una vez que la operación en ese objeto se realiza un hilo a la vez. Ahora queremos que los otros hilos accedan a ese objeto o código. De lo contrario, nuestro código se mueve en la situación de "punto muerto" que hace que el objeto creado con el mutex permanezca en la situación bloqueada para siempre y ningún otro hilo podría acceder a ese objeto. Por lo tanto, una operación incompleta sigue ejecutando. Después de esto, salimos de la función de bloque y nos movemos a la principal.

En general, simplemente mostramos nuestro mutex creado creando los tres hilos utilizando el "std :: thread thread_name (llamando a la función de bloque ya creada aquí en la que creamos el mutex)" con los nombres Thread1, Thread2 y Thread3, etc. De esta manera, se crean los tres hilos. Luego nos unimos a estos tres hilos para ser ejecutados simultáneamente llamando al "Hort_name. método unir () ". Y luego, devolvemos el valor igual a cero. La explicación mencionada anteriormente del ejemplo se implementa en forma del código que se puede mostrar en la siguiente figura:

En la salida del código, podemos ver la ejecución y la visualización de los tres subprocesos uno por uno. Podemos ver incluso si nuestra aplicación se encuentra en la categoría de múltiples lecturas. Aún así, ninguno de los subprocesos ha sobrescrito o modificado los datos y ha compartido el recurso modificado debido a la implementación del mutex del "bloque de funciones".

Conclusión

Esta guía ofrece una explicación detallada del concepto de la función mutex utilizada en c++. Discutimos cuáles son las aplicaciones de lectura múltiple, qué problemas tenemos que encontrar en aplicaciones de lectura múltiple y por qué necesitamos implementar el mutex para aplicaciones múltiples. Luego discutimos la sintaxis para el mutex con el ejemplo ficticio usando el código de pseudo. Luego, implementamos un ejemplo completo en las aplicaciones múltiples con el mutex en el C ++ Visual Studio.