Middle
Čo sú lock-ery v C#?
sobes.tech AI
Odpoveď od AI
lock v C# sa používa na zabezpečenie výlučného prístupu ku kódu. Zaručuje, že iba jeden vlákno môže súčasne vykonávať tento blok, čím sa predchádza podmienkam súťaže (race conditions) pri práci so zdieľanými zdrojmi.
private static readonly object _lockObject = new object(); // Objekt na synchronizáciu
public void AccessSharedResource()
{
lock (_lockObject) // Zámok objektu
{
// Kritická sekcia: kód, ktorý vyžaduje výlučný prístup
// Práca so zdieľaným zdrojom (napríklad zmena premennej)
} // Zámok sa automaticky uvoľní pri opustení bloku
}
Alternatívy a súvisiace pojmy:
Monitor: Poskytuje jemnejšiu kontrolu nad synchronizáciou, vrátane metód Wait, Pulse, PulseAll.Mutex: Používa sa na synchronizáciu medzi procesmi, ako aj medzi vláknami v tom istom procese.Semaphore/SemaphoreSlim: Obmedzuje počet vlákien, ktoré môžu súčasne získať prístup ku zdroju.ReaderWriterLockSlim: Umožňuje viacerým vláknam čítať súčasne, ale len jednému písať.
Výber mechanizmu zámku závisí od konkrétneho úlohy synchronizácie. lock je skrátená forma použitia Monitor.Enter a Monitor.Exit a je vhodná pre väčšinu jednoduchých prípadov synchronizácie v rámci jedného procesu.