Sobes.tech
Middle

Cosa sono i lock-ers in C#?

sobes.tech AI

Risposta dell'AI

lock in C# viene utilizzato per garantire l'accesso esclusivo a un blocco di codice. Garantisce che solo un thread possa eseguire quel blocco alla volta, prevenendo condizioni di gara (race conditions) durante l'uso di risorse condivise.

private static readonly object _lockObject = new object(); // Oggetto per la sincronizzazione

public void AccessSharedResource()
{
    lock (_lockObject) // Blocca l'oggetto
    {
        // Sezione critica: codice che richiede accesso esclusivo
        // Lavoro con risorsa condivisa (ad esempio, modificare una variabile)
    } // La lock viene rilasciata automaticamente all'uscita dal blocco
}

Alternative e concetti correlati:

  • Monitor: Fornisce un controllo più granulare sulla sincronizzazione, includendo metodi come Wait, Pulse, PulseAll.
  • Mutex: Usato per la sincronizzazione tra processi, così come tra thread nello stesso processo.
  • Semaphore/SemaphoreSlim: Limita il numero di thread che possono accedere contemporaneamente a una risorsa.
  • ReaderWriterLockSlim: Permette a più thread di leggere contemporaneamente, ma solo a uno di scrivere.

La scelta del meccanismo di lock dipende dal compito di sincronizzazione specifico. lock è una forma abbreviata di utilizzo di Monitor.Enter e Monitor.Exit, ed è adatto per la maggior parte dei casi semplici di sincronizzazione all'interno di un processo.