Middle
Je možné použiť reťazec ako objekt na blokovanie v konštrukcii lock?
sobes.tech AI
Odpoveď od AI
Neodporúča sa používať reťazec ako objekt na zamknutie (lock) v C#. Hoci je to technicky možné, reťazce v .NET sú nemenné (immutable) a môžu byť internované, čo znamená, že rovnaké literály reťazcov môžu odkazovať na ten istý objekt v pamäti.
To prináša riziko, že rôzne časti programu môžu náhodne použiť ten istý reťazec na zamknutie, čo spôsobí nepredvídateľné správanie a problémy so synchronizáciou.
Správny prístup je použiť samostatný súkromný objekt na zamknutie:
private readonly object _lockObj = new object();
lock(_lockObj)
{
// kritická sekcia
}
Tým zabezpečíte, že zamknutie je kontrolované iba vaším kódom a neprekrýva sa s inými časťami programu.