Junior — Middle
Czy można przekazać obiekt typu string jako mechanizm blokady synchronizacji?
sobes.tech AI
Odpowiedź od AI
Nie zaleca się używania obiektu typu string jako mechanizmu blokowania (lock) w C#. Powód jest taki, że łańcuchy znaków są obiektami niemutowalnymi i internowanymi (interned), co oznacza, że identyczne literały łańcuchów mogą odnosić się do tego samego obiektu w pamięci.
Może to prowadzić do nieoczekiwanych blokad, jeśli różne części programu używają tych samych wartości łańcuchów do synchronizacji, co może powodować zakleszczenia lub obniżenie wydajności.
Lepszym rozwiązaniem jest użycie prywatnego obiektu, specjalnie przeznaczonego do blokowania:
private readonly object _lockObj = new object();
public void SomeMethod()
{
lock(_lockObj)
{
// sekcja krytyczna
}
}