Sobes.tech
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.