Sobes.tech
Junior — Middle

Át lehet adni egy string típusú objektumot szinkronizációs zárolási mechanizmusként?

sobes.tech MI

Válasz az MI-től

Nem ajánlott string típusú objektumot használni zárolási (lock) mechanizmusként C#-ban. Ennek oka, hogy a sztringek immutable és internált (interned) objektumok, vagyis azonos sztring literálok ugyanarra az objektumra hivatkozhatnak a memóriában.

Ez váratlan zárolásokhoz vezethet, ha a program különböző részei ugyanazokat a sztring értékeket használják szinkronizációra, ami holtpontokat vagy a teljesítmény csökkenését okozhatja.

Jobb egy privát objektumot használni, amit kifejezetten zárolásra szántak:

private readonly object _lockObj = new object();

public void SomeMethod()
{
    lock(_lockObj)
    {
        // kritikus szekció
    }
}