Middle
Czym są lock-ery w C#?
sobes.tech AI
Odpowiedź od AI
lock w C# jest używany do zapewnienia wyłącznego dostępu do bloku kodu. Gwarantuje, że tylko jeden wątek może wykonywać ten blok jednocześnie, zapobiegając warunkom wyścigu (race conditions) podczas pracy z zasobami współdzielonymi.
private static readonly object _lockObject = new object(); // Obiekt do synchronizacji
public void AccessSharedResource()
{
lock (_lockObject) // Blokada obiektu
{
// Sekcja krytyczna: kod wymagający wyłącznego dostępu
// Praca z zasobem współdzielonym (np. zmiana zmiennej)
} // Blokada jest automatycznie zwalniana po wyjściu z bloku
}
Alternatywy i powiązane pojęcia:
Monitor: Zapewnia bardziej szczegółową kontrolę nad synchronizacją, w tym metody Wait, Pulse, PulseAll.Mutex: Używany do synchronizacji między procesami, a także między wątkami w tym samym procesie.Semaphore/SemaphoreSlim: Ogranicza liczbę wątków, które mogą jednocześnie uzyskać dostęp do zasobu.ReaderWriterLockSlim: Pozwala wielu wątkom czytać jednocześnie, ale tylko jednemu pisać.
Wybór mechanizmu blokowania zależy od konkretnego zadania synchronizacyjnego. lock jest skrótem od użycia Monitor.Enter i Monitor.Exit i nadaje się do większości prostych przypadków synchronizacji w obrębie tego samego procesu.