Junior — Middle
Akými spôsobmi ste zabezpečili bezpečnú prácu vlákien pri súčasnom plnení úloh?
sobes.tech AI
Odpoveď od AI
Za zabezpečenie bezpečnej práce vlákien pri súčasnom vykonávaní úloh v C# sa používajú rôzne mechanizmy synchronizácie a riadenia prístupu ku spoločným zdrojom:
- lock — zablokuje kritickú sekciu kódu, aby ju mohol vykonávať iba jeden vlákno naraz.
- Mutex — medziprocesové blokovanie, užitočné pri práci so zdrojmi dostupnými z rôznych procesov.
- Semaphore a SemaphoreSlim — obmedzujú počet vlákien, ktoré môžu súčasne získať prístup ku zdroju.
- Monitor — flexibilnejší mechanizmus blokovania, ktorý umožňuje čakať a signalizovať udalosti.
- Konkurentné kolekcie (napríklad,
ConcurrentDictionary,ConcurrentQueue) — zabezpečujú vlákno bezpečný prístup ku kolekciám. - Interlocked — atómové operácie nad premennými na prevenciu závodných podmienok.
Príklad použitia lock:
private readonly object _lockObj = new object();
private int _counter = 0;
public void Increment()
{
lock(_lockObj)
{
_counter++;
}
}
Tento prístup zabraňuje súčasným zmenám _counter z rôznych vlákien, čím sa predchádza závodným podmienkam a zabezpečuje správnosť údajov.