Sobes.tech
Middle

Какво са lock-ерите в C#?

sobes.tech AI

Отговор от AI

lock в C# се използва за осигуряване на изключителен достъп до блок от код. Той гарантира, че само един поток може да изпълнява този блок едновременно, предотвратявайки състезателни условия (race conditions) при работа с общи ресурси.

private static readonly object _lockObject = new object(); // Обект за синхронизация

public void AccessSharedResource()
{
    lock (_lockObject) // Заключване на обекта
    {
        // Критична секция: код, който изисква изключителен достъп
        // Работа с общ ресурс (например, промяна на променлива)
    } // Заключването се освобождава автоматично при изход от блока
}

Алтернативи и свързани понятия:

  • Monitor: Осигурява по-фин контрол върху синхронизацията, включително методите Wait, Pulse, PulseAll.
  • Mutex: Използва се за синхронизация между процеси, както и между нишки в един процес.
  • Semaphore/SemaphoreSlim: Ограничават броя на нишките, които могат едновременно да получат достъп до ресурс.
  • ReaderWriterLockSlim: Позволява на множество нишки да четат едновременно, но само на една да пише.

Изборът на механизъм за заключване зависи от конкретната задача за синхронизация. lock е съкратена форма на използване на Monitor.Enter и Monitor.Exit и е подходящ за повечето прости случаи на синхронизация вътре в един процес.