Multithreading es uno de los poderosos conceptos de cualquier lenguaje de programación. Es básicamente multiprocesamiento basado en subprocesos. En este proceso, el programa se divide en diferentes partes y estas partes pueden ejecutarse al mismo tiempo o simultáneamente. El beneficio de usar subprocesos múltiples en un programa es que maximiza la utilización de la CPU de nuestro sistema. Un subproceso es un subproceso ligero que puede compartir recursos con otro subproceso. Es por eso que el programa que usa un mecanismo de subprocesos múltiples tiende a consumir menos espacio. Esto varía con la multitarea, ya que en ese caso se asigna memoria separada para diferentes tareas. Este artículo se enfoca en demostrar el bloqueo de subprocesos a través de C#.
Bloquear hilo
La declaración de bloqueo se usa para tomar el bloqueo de exclusión mutua para un objeto específico. Ejecuta un bloque específico y luego libera el bloqueo. El tiempo durante el cual el bloqueo está activo, el subproceso que mantiene el bloqueo puede volver a tomar y liberar el bloqueo. Tenga en cuenta que cualquier otro subproceso no puede acceder al bloqueo y espera a menos que se libere el bloqueo.
Sintaxis:
bloquear (exp)
{
// cuerpo
}
Aquí, exp es una expresión de tipo de referencia.
Nota: el operador await no se puede usar en la declaración de bloqueo.
Ejemplo: en el siguiente programa, estamos usando un ciclo for y en cada paso de la iteración, estamos creando un nuevo hilo. Aquí, usando la palabra clave lock, especificamos un bloque de declaraciones como una sección crítica al obtener el bloqueo de exclusión mutua para un objeto específico y luego ejecutar una declaración. Ahora, el método sleep() se ha utilizado para pausar el hilo durante un período de tiempo específico y luego liberará el bloqueo.
C#
// C# program to illustrate lock in thread using System; using System.Threading; class GFG{ // Creating a reference type object static readonly object obj = new object(); static void Sample() { // Lock statement block lock(obj) { // Sleep the thread Thread.Sleep(20); // Print the count Console.WriteLine(Environment.TickCount); } } // Driver code static public void Main() { // Iterate using a for-loop for(int i = 0; i < 5; i++) { // Create a new thread ThreadStart begin = new ThreadStart(Sample); // Start executing the thread new Thread(begin).Start(); } } }
Producción:
-1836894307 -1836894283 -1836894263 -1836894243 -1836894223