C# LanguageDeclaración de bloqueo


Sintaxis

  • bloqueo (obj) {}

Observaciones

Usando la instrucción de lock , puede controlar el acceso de diferentes hilos al código dentro del bloque de código. Se usa comúnmente para prevenir condiciones de carrera, por ejemplo, varios subprocesos que leen y eliminan elementos de una colección. Como el bloqueo hace que los subprocesos esperen a que otros suban para salir de un bloque de código, puede causar retrasos que podrían resolverse con otros métodos de sincronización.

MSDN

La palabra clave de bloqueo marca un bloque de declaración como una sección crítica al obtener el bloqueo de exclusión mutua para un objeto determinado, ejecutar una declaración y luego liberar el bloqueo.

La palabra clave de bloqueo garantiza que un subproceso no ingrese a una sección crítica del código mientras que otro subproceso está en la sección crítica. Si otro hilo intenta ingresar un código bloqueado, esperará, bloqueará, hasta que se libere el objeto.

La mejor práctica es definir un objeto privado para bloquear, o una variable de objeto estática privada para proteger los datos comunes a todas las instancias.


En C # 5.0 y versiones posteriores, la instrucción de lock es equivalente a:

bool lockTaken = false;
try 
{
    System.Threading.Monitor.Enter(refObject, ref lockTaken);
    // code 
}
finally 
{
    if (lockTaken)
        System.Threading.Monitor.Exit(refObject);
}

Para C # 4.0 y anteriores, la declaración de lock es equivalente a:

System.Threading.Monitor.Enter(refObject);
try 
{
    // code
}
finally 
{
     System.Threading.Monitor.Exit(refObject);
}

Declaración de bloqueo Ejemplos relacionados