Junior
¿Cuál es la función de la palabra clave lock en el lenguaje C#?
sobes.tech AI
Respuesta de la IA
La palabra clave lock se utiliza para sincronizar el acceso a recursos en aplicaciones multihilo. Garantiza que solo un hilo pueda ejecutar el código dentro del bloque lock en un momento dado.
Principio de funcionamiento:
lockacepta como argumento un objeto que se usa como mutex (monitor).- Antes de ejecutar el código dentro del bloque
lock, el hilo intenta obtener un bloqueo exclusivo en el objeto especificado. - Si el bloqueo está libre, el hilo lo obtiene y ejecuta el código.
- Si el bloqueo está ocupado por otro hilo, el hilo actual se bloquea (pasa a estado de espera) hasta que el bloqueo sea liberado.
- Al salir del bloque
lock(incluso en caso de excepción), el bloqueo se libera automáticamente.
Se usa para proteger recursos compartidos, como campos de clases, colecciones u otros objetos a los que pueden acceder varios hilos simultáneamente, para evitar condiciones de carrera y garantizar la integridad de los datos.
Ejemplo de uso:
public class SharedResource
{
private int _counter;
private readonly object _lockObject = new object(); // Objeto para sincronización
public void Increment()
{
lock (_lockObject) // Acceso exclusivo al bloque de código
{
_counter++; // Modificación segura del recurso compartido
}
}
public int GetCounter()
{
lock (_lockObject) // Acceso exclusivo también al leer
{
return _counter;
}
}
}
Puntos importantes:
- El objeto para bloquear debe ser de tipo referencia y, por lo general, un campo privado (
readonly) para evitar interferencias externas. - Evite bloquear tipos como
string,thisotypeof(TypeName), ya que pueden ser compartidos o accesibles desde fuera, lo que puede llevar a bloqueos mutuos (deadlocks) o funcionamiento incorrecto. lockes azúcar sintáctico para usar los métodos de la claseMonitor.