Middle
Co jsou lock-ery v C#?
sobes.tech AI
Odpověď od AI
lock v C# se používá k zajištění výlučného přístupu ke kódu. Zaručuje, že pouze jeden vlákno může tento blok vykonávat najednou, čímž se předchází závodním podmínkám (race conditions) při práci se sdílenými zdroji.
private static readonly object _lockObject = new object(); // Objekt pro synchronizaci
public void AccessSharedResource()
{
lock (_lockObject) // Zamčení objektu
{
// Kritická sekce: kód, který vyžaduje výlučný přístup
// Práce se sdíleným zdrojem (například změna proměnné)
} // Zámek je automaticky uvolněn při opuštění bloku
}
Alternativy a související pojmy:
Monitor: Poskytuje jemnější kontrolu nad synchronizací, včetně metod Wait, Pulse, PulseAll.Mutex: Používá se pro synchronizaci mezi procesy, stejně jako mezi vlákny v jednom procesu.Semaphore/SemaphoreSlim: Omezuje počet vláken, která mohou současně získat přístup ke zdroji.ReaderWriterLockSlim: Umožňuje více vláknům číst současně, ale pouze jednomu psát.
Volba mechanismu zámku závisí na konkrétním úkolu synchronizace. lock je zkrácená forma použití Monitor.Enter a Monitor.Exit a je vhodná pro většinu jednoduchých případů synchronizace uvnitř jednoho procesu.