Sobes.tech
Junior — Middle

Je možné odovzdať objekt typu string ako mechanizmus blokovania synchronizácie?

sobes.tech AI

Odpoveď od AI

V C# sa nedoporučuje používať objekt typu string ako mechanizmus blokovania (lock). Dôvodom je, že reťazce sú nemenné a internované (interned) objekty, čo znamená, že rovnaké literály reťazcov môžu odkazovať na ten istý objekt v pamäti.

To môže viesť k nečakaným zámkom, ak rôzne časti programu používajú rovnaké hodnoty reťazcov na synchronizáciu, čo môže spôsobiť zablokovanie alebo znížiť výkon.

Je lepšie použiť súkromný objekt, ktorý je špeciálne určený na zámok:

private readonly object _lockObj = new object();

public void SomeMethod()
{
    lock(_lockObj)
    {
        // kritická sekcia
    }
}