C# mutex

C# mutex
En la programación de C#, podemos usar la clase mutex para sincronizar entre dos hilos. Funciona como una cerradura. Evita que dos hilos ejecutaran uno o más actos simultáneamente. Mutex funciona en muchos procesos. Da métodos WaitOne () y también ReleaseMutex (). El método WaitOne () se utiliza para bloquear el recurso, y el método ReleAseMutex () está aquí para desbloquear el recurso. Es útil cuando trabajamos con un proyecto multipramado o un proyecto en el que creamos múltiples tareas. Deberíamos usar esto cuando intentemos bloquear otras tareas o hilos que no pueden usar el recurso mientras la otra tarea o hilo está utilizando ese recurso.

Aquí, en esta guía, le explicaremos cómo usamos la clase Mutex en la programación C#. Proporcionamos diferentes ejemplos de uso de esta clase mutex () en nuestro programa C#. Realizamos los ejemplos dados en Ubuntu 20.04.

Ejemplo 1

Realizaremos un ejemplo usando esta clase mutex (). Mientras estamos usando el Ubuntu 20.04 Para realizar estos ejemplos, tenemos que abrir el editor de texto de este Ubuntu 20.04 y luego cree un archivo con cualquier nombre de nuestra elección y guarde este archivo con la extensión del archivo de ".CS ". Luego escriba el siguiente código en este archivo. También explicamos cada línea de este programa dado en detalle a continuación.

La primera línea de este código C# es "usar el sistema", una biblioteca, y al usar esta biblioteca, podemos obtener diferentes clases y funciones de nuestro código C#. Obtenemos la clase de "consola" y la función de "escritura" mediante el uso de esta biblioteca. La palabra clave "usando" se usa para recibir parámetros. El sistema. Hushing ”está aquí para generar tareas y recibir objetos de la clase. Ahora, importaremos el espacio de nombres con el nombre "Demomutex". También creamos una clase llamada "Programa". Creamos una instancia llamada "mutex" que es igual a "nuevo mutex ()". El "nuevo" es una palabra clave para crear una nueva instancia.

Luego llame a la función "principal" en nuestro código C#. En esta función "principal", tenemos un bucle "para" utilizado para crear cinco hilos diferentes. Como este bucle inicializa "A" con "1", la condición aquí es "A<=5” which means there are 5 iterations in the loop or the loop iterates 5 times and creacreatestiple threads. Each time the value of “a” increments when the loop executes and the condition is true. Then we create a Thread object with the name “threadObj” by using the “new” keyword. When this loop executes, it creates an object of the Thread. Now, we give the “name” to the “threadobj” which is equal to the value of “a”. It will store the name as “Thread” + a means the “Thread” and the value of “a” that “a” depends on the value of the loop iteration.

Entonces tenemos "threadobj.Inicio () "en el que se utiliza" inicio () "para cambiar el estado del" threadobj "al estado en ejecución. Fuera de este bucle "para", tenemos "consola.Leer la clave()". Esto se utilizará para esperar un KeyPress. Tenemos un método debajo de esto con el nombre "demomutex" que es "estático". Utilizamos este método para implementar la sincronización utilizando el "mutex". La consola.WriteLine ”está aquí para imprimir la declaración escrita dentro de ella. Después de esta "consola.Declaración de WriteLine ", utilizaremos el método" Try ".

Por otra parte, tenemos la "consola.Declaración de WriteLine ”. Cuando vea la salida, le será claro cómo esta "consola.WriteLine ”Imprime la declaración dada. La amenaza.Sleep (2000) ”es para suspender o detener la ejecución del hilo actual por un tiempo que se da como parámetro aquí. Después de esto, nuevamente usamos la "Consola.Declaración de WriteLine ”. Utilizamos la palabra clave "palabra clave" para limpiar los recursos que asignamos en el bloque de try o la declaración dentro de este bloque "finalmente" ejecutado cuando la declaración de try deja el control. Dentro de la declaración "Finalmente", llamaremos al método "Releasemutex", que se utiliza para desbloquear para que otro hilo inicie la ejecución que está tratando de ejecutar.

También damos la salida de este código en la imagen a continuación. Puede ver cómo este código da la salida en la pantalla. Compilamos nuestro código con este comando, y cuando el código está libre de errores, creará un archivo exe para nosotros. Este archivo "exe" se ejecuta luego utilizando el comando "mono". Y recuerde que cuando usamos este comando "mono", debemos usar el ".EXE "Extensión del archivo con el nombre del archivo y luego ejecute este comando para obtener la salida.

En esta salida, puede ver que cuando un hilo quiere ingresar a la sección crítica, los otros subprocesos también quieren ingresar, pero tienen que esperar hasta que el primer hilo complete la ejecución porque usamos la función mutex "waitone ()". Cuando este hilo completa su ejecución, el siguiente hilo ingresa e inicia su ejecución y existe después de completar su tarea. Permite que el siguiente hilo ingrese e inicie la ejecución. Los mismos pasos se repiten hasta que la condición sea verdadera.

Ejemplo # 2

Aquí, tenemos otra ilustración usando el método mutex (). Intentemos este ejemplo para comprender este concepto.

Las mismas declaraciones utilizadas en este código C# están "usando el sistema" y "Sistema.Enhebrado ". La clase es "mutexprogram" y en la clase, hemos creado una instancia de la clase mutex con el nombre "mutex" utilizando la "nueva" palabra clave y luego llamando a la función "principal" debajo de esto. El método WaitOne () intenta obtener un bloqueo. Si el mutex no está disponible, entonces "waitone ()" bloquea y espera hasta que esté disponible. También especificamos un límite de tiempo aquí. Si llamamos método waitone () en el "objeto mutex" y el límite de tiempo pasa sin poder adquirir el mutex, entonces Waitone devuelve falso. Cuando devuelve False, la declaración escrita a continuación se ejecutará: la "Consola.Declaración de WriteLine ”. Y esta declaración se usa para imprimir.

Si nos hacemos realidad, vamos a la sección de código ejecutada, que es la función "ejecutar ()", y esta función se define a continuación. Cuando termina "Run ()", luego se ejecuta el bloque "Finalmente", que libera el mutex usando "mutexrelease". Explicamos esta "mutexRelease" en el código anterior. Definimos la función "ejecutar ()" aquí en la que vamos a imprimir una declaración usando "Consola.WriteLine () "y por fin, tenemos la" Consola.Readline () ". Esta "consola.Readline ”está aquí para la lectura de cadenas completas hasta que se presione la tecla ENTER.

La salida solo muestra las declaraciones "run ()" porque devuelve verdadero y se mueve al "run ()". Si ejecutamos esto en el otro terminal simultáneamente, entonces en el otro terminal, mostrará la declaración que se escribe dentro de la declaración IF ya que intenta obtener el "mutex" pero el "mutex" ya está en el uso de otra aplicación , por lo que tiene que esperar a que el "mutex" lance.

Conclusión

Este tutorial explora el "mutex" en la programación de C#. Demostramos dos ejemplos aquí y usamos este "mutex" para que comprenda este concepto. Esta clase "Mutex" nos proporcionará funciones "WaitOne ()" y "RealEaseMutex ()". Este "WaitOne ()" se usa para bloquear, y el "ReleaseMutex ()" se usa para desbloquear la tarea o el hilo. Utilizamos ambos métodos en nuestros ejemplos y explicamos todos estos en detalle. Espero que aprenda este concepto "mutex" después de un estudio exhaustivo de esta guía y también pueda usar esta clase "mutex" en su proyecto.