Sobes.tech
Middle
114
questionbank

Что такое lock-еры в C#?

Answer from AI

sobes.tech 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 и подходит для большинства простых случаев синхронизации внутри одного процесса.