Middle
Vai var izmantot virkni kā objektu bloķēšanai lock konstrukcijā?
sobes.tech AI
Atbilde no AI
Nav ieteicams izmantot virkni kā bloķēšanas (lock) objektu C# valodā. Lai gan tas ir tehniski iespējams, .NET virknēs ir nemainīgas (immutable) un tās var tikt iekšēji internētas (interned), kas nozīmē, ka identiski virkņu literāli var atsaukties uz to pašu objektu atmiņā.
Tas rada risku, ka dažādas programmas daļas nejauši izmantos to pašu virkni bloķēšanai, kas novedīs pie neparedzamas uzvedības un sinhronizācijas problēmām.
Pareizā pieeja ir izmantot atsevišķu privātu objektu bloķēšanai:
private readonly object _lockObj = new object();
lock(_lockObj)
{
// kritiskā sadaļa
}
Tādējādi jūs nodrošināt, ka bloķēšana tiek kontrolēta tikai ar jūsu kodu un nesaskaras ar citām programmas daļām.