Middle
115
questionbank
Что такое lock-еры в C#?
Ответ от нейросети
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 и подходит для большинства простых случаев синхронизации внутри одного процесса.