Sobes.tech
Middle

Ar galima naudoti eilutę kaip objektą užrakinimui lock konstrukcijoje?

sobes.tech AI

Atsakymas iš AI

Rekomenduojama nenaudoti eilutės kaip objekto užraktui (lock) C# kalboje. Nors techniškai tai įmanoma, .NET eilutės yra nekintamos (immutable) ir gali būti įterptos (interned), tai reiškia, kad tie patys eilutės literatai gali nurodyti tą patį objektą atmintyje.

Tai sukelia riziką, kad skirtingos programos dalys atsitiktinai naudos tą patį eilutę užraktui, kas sukels nenuspėjimą elgesį ir sinchronizacijos problemas.

Tinkamas būdas yra naudoti atskirą privačią objektą užraktui:

private readonly object _lockObj = new object();

lock(_lockObj)
{
    // kritinė sekcija
}

Taip užtikrinate, kad užraktas būtų kontroliuojamas tik jūsų kodo ir nesikirstų su kitomis programos dalimis.