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 и е подходящ за повечето прости случаи на синхронизация вътре в един процес.