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ó
}
}