C# – Bloquear hilo

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

Publicación traducida automáticamente

Artículo escrito por bhuwanesh y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *