C# LanguageLock Statement

Sintassi

  • lock (obj) {}

Osservazioni

Utilizzando l'istruzione lock è possibile controllare l'accesso di diversi thread al codice all'interno del blocco di codice. Viene comunemente usato per prevenire condizioni di gara, ad esempio più thread che leggono e rimuovono oggetti da una collezione. Poiché il blocco delle forze thread in attesa di altri thread per uscire da un blocco di codice, può causare ritardi che potrebbero essere risolti con altri metodi di sincronizzazione.

MSDN

La parola chiave lock contrassegna un blocco di istruzioni come sezione critica ottenendo il blocco di esclusione reciproca per un dato oggetto, eseguendo un'istruzione e quindi rilasciando il blocco.

La parola chiave lock assicura che un thread non entri in una sezione critica del codice mentre un altro thread si trova nella sezione critica. Se un altro thread tenta di inserire un codice bloccato, attenderà, bloccherà, fino a quando l'oggetto non verrà rilasciato.

È consigliabile definire un oggetto privato da bloccare o una variabile oggetto statica privata per proteggere i dati comuni a tutte le istanze.


In C # 5.0 e versioni successive, l'istruzione lock equivale a:

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

Per C # 4.0 e precedenti, l'istruzione lock equivale a:

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

Lock Statement Esempi correlati