Ejemplo # 01: sin construcción de bloqueo
Comencemos con el primer ejemplo de este artículo para el uso de bloqueos en C#. Entonces, primero tenemos que hacer una estructura de código C#. Sin la estructura de código estándar de C#, nuestro código no funcionará. Por lo tanto, debe iniciarlo con el uso de la biblioteca "Sistema" especificada por la palabra clave "usando" en el código. Como tenemos que trabajar en hilos, necesitamos especificar el espacio de nombres de subprocesos de la biblioteca del sistema a través de la palabra clave "usando".
Ambas bibliotecas son necesarias para la implementación de bloqueos y hilos en nuestros ejemplos en este artículo. Después de esto, hemos inicializado una clase simple de "prueba" en el código C#. También puede definir un espacio de nombres antes de la clase, pero no es necesario aquí. La clase "prueba" contiene un total de 2 funciones. Uno es una función definida por el usuario llamada "show ()" y la otra es la función principal () de C# que también es una función de ejecutor en los códigos C#. El proceso de ejecución comienza desde el método main () de este programa. Hemos estado usando la clase de "hilo" del espacio de nombres de "subproces" para la creación de dos nuevos objetos de hilo T1 y T1 con la ayuda de una "nueva" palabra clave.
Dentro de la creación de hilos, hemos utilizado la función de "mostrar" en los argumentos de "hilo" para que sea una función de subproceso. Como hemos creado 2 hilos, significa que la función show () se usará 2 veces en el código como hilo 1 y hilo 2 respectivamente. Esto es solo una creación de hilos y no su ejecución. Para ejecutar el hilo, necesitamos usar la función "Inicio" en el espacio de nombres de la clase de subprocesos. Por lo tanto, el objeto "T1" del hilo 1 se ha utilizado para llamar a la función "Inicio" para ejecutar la función de subproceso "Mostrar". Después del primer hilo, el segundo subproceso T2 ejecutará el método "show" usando la misma función de inicio. Ahora, cuando se ha iniciado un hilo, la función show () se ejecutará utilizando su bucle "para" para hasta 5 iteraciones. Hasta que se ejecute el bucle, continuará ejecutando su "consola.Declaración de función WriteLine () "para mostrar el número de iteración utilizando la variable de iteración" I ". Después de cada iteración, el hilo dormirá de 3 segundos utilizando la función de "dormir" de C# aquí. Lo mismo se repetirá cuando comience un segundo hilo. Ahora, como hemos estado utilizando hilos para ejecutar la función de "mostrar", no está seguro de que lo ejecute de una manera donde . hilo 1 primero y luego hilo 2. Guardemos nuestro código para ver su resultado.
Necesitamos comandos de entorno del compilador de C# y tiempo de ejecución para compilar y ejecutar nuestros códigos. Ya hemos instalado ambos. Por lo tanto, hemos utilizado el comando C# "MCS" utilizado como el compilador C# para compilar este código recién hecho. La compilación no devuelve nada más que genera un nuevo archivo "exe" en la misma carpeta actual I.mi. exitoso.
Entonces, hemos ejecutado este archivo "exe" para el código C# con el comando de tiempo de ejecución "mono" de C#. Como ambos hilos se iniciaron en la función Main (), así continúan ejecutando la función show () una tras otra en cada iteración. Esto significa que un hilo estaba tomando los recursos del otro hilo, mientras que el primero ni siquiera completó su ejecución por completo. Esto también puede causar un punto muerto.
Ejemplo # 02: con construcción de bloqueo
Para evitar que los subprocesos se ejecuten al mismo tiempo, mientras se comparten o solicitan los recursos, debemos usar la construcción de "bloqueo" en el código C#. La construcción de bloqueo asegurará, no permitirá que ningún otro hilo obtenga recursos utilizados actualmente por el proceso de ejecución actualmente hasta que complete su ejecución. Esto puede funcionar en la regla prioritaria o . Primero ven, primero servido. Para usar la construcción de "bloqueo", tenemos que crear un objeto para bloquear usando la clase "Objeto" de C#.
Este objeto debe ser de solo lectura estática. Puedes nombrarlo como lo desees. La creación de un objeto de bloqueo asegura que se cree un bloqueo y no se aplique a algunas partes del código. Lo hemos llamado "parar". Ahora, necesitamos crear una construcción con su palabra clave "bloquear" y especificar el nombre de bloqueo en sus argumentos como "parar" dentro de la función "show". Como la función show () es nuestro hilo, tenemos que colocar su implementación dentro de la construcción de "bloqueo" (i.mi. el código de código que queremos restringir el acceso al.) Ahora, nuestro código está listo ya que el bloqueo se ha aplicado a la pieza de código dentro de la función de subproceso. Guardar este código actualizado y ejecutarlo para ver su resultado.
Hemos compilado este código actualizado en nuestro terminal Ubuntu y ejecutado su archivo "exe" después de eso. Esta vez, toda la función de "show" se ha ejecutado completamente (i.mi. Se completa el bucle "para".) Esto se debe a que en ambas ocasiones cuando se inicia un hilo con la función "Inicio", la construcción de bloqueo "Stop" bloqueó el código de función Show () hasta que el primer hilo completó su ejecución. Después de eso, esto también le sucedió al hilo 2. Por lo tanto, nuestra salida es suave.
La salida de arriba se mostrará sin pausa y en un segundo en su pantalla. Esto no le permitirá ver cómo funcionan una iteración una tras otra cuando no hay demora en la ejecución mientras usa un bloqueo. Actualicemos la función "Mostrar" en el mismo código y agregamos la función de sueño que tome 2 segundos de sueño después de la ejecución de la consola.Declaración de función WriteLine () mientras se itera. Guarde este código con Ctrl+S, cierre el archivo y abra el shell.
Después de compilar el archivo de código, hemos ejecutado su archivo "exe" en el shell. El código comienza a ejecutar sus hilos. El primer hilo "show" comenzó mientras dormía durante 2 segundos después de cada iteración como se muestra a continuación.
Después de que el primer hilo "show" complete su ejecución, el bloqueo lanzado el acceso a la función de espectáculo y el hilo 2 se ha adquirido para su ejecución.
Conclusión:
Este artículo contiene detalles sobre la construcción de bloqueo en C#. Hemos discutido nuestro primer ejemplo sin usar la construcción de "bloqueo" y obtuvimos una salida con la ejecución aleatoria y desordenada de una función de subproceso. Hemos discutido las causas de esta ejecución desordenada del hilo también. Después de eso, discutimos un ejemplo con el uso de la construcción de "bloqueo" y obtuvimos una salida con una forma aleatoria de ejecución de subprocesos.