Junior
Jaká je funkce klíčového slova lock v jazyce C#?
sobes.tech AI
Odpověď od AI
Klíčové slovo lock se používá k synchronizaci přístupu ke zdrojům v vícevláknových aplikacích. Zajišťuje, že pouze jedno vlákno může v daném okamžiku spustit kód uvnitř bloku lock.
Princip fungování:
lockpřijímá jako argument objekt, který se používá jako mutex (monitor).- Před vykonáním kódu uvnitř bloku
lockse vlákno pokusí získat výlučné uzamčení na daném objektu. - Pokud je uzamčení volné, vlákno ho získá a vykoná kód.
- Pokud je uzamčení obsazené jiným vláknem, aktuální vlákno se zablokuje (přepne do stavu čekání), dokud uzamčení nebude uvolněno.
- Při opuštění bloku
lock(i při výjimce) je uzamčení automaticky uvolněno.
Používá se k ochraně sdílených zdrojů, jako jsou pole tříd, kolekce nebo jiné objekty, ke kterým mohou přistupovat současně více vláken, aby se zabránilo závodním podmínkám (race conditions) a zajistila integrita dat.
Příklad použití:
public class SharedResource
{
private int _counter;
private readonly object _lockObject = new object(); // Objekt pro synchronizaci
public void Increment()
{
lock (_lockObject) // Výlučný přístup k bloku kódu
{
_counter++; // Bezpečná změna sdíleného zdroje
}
}
public int GetCounter()
{
lock (_lockObject) // Také při čtení výlučný přístup
{
return _counter;
}
}
}
Důležité body:
- Objekt pro zamčení musí být odkazového typu a obvykle soukromé pole (
readonly), aby se zabránilo zásahu zvenčí. - Vyvarujte se zamykání typů jako
string,thisnebotypeof(TypeName), protože mohou být sdílené nebo přístupné zvenčí, což může vést k deadlockům nebo nesprávnému chování. lockje syntaktický cukr pro použití metod třídyMonitor.