Junior — Middle
Операцияҳои бастан дар дохили қисмати критикӣ имконпазир аст?
sobes.tech AI
Ҷавоб аз AI
Мумкін аст, ки дар дохили қисмати критикӣ дар C# амалиётҳои бастани блокҳо иҷро шаванд, аммо эҳтиёткорӣ талаб мекунад. Қисмати критикӣ қисмати коди аст, ки бо блок (масалан, бо lock) муҳофизат шудааст, то дастрасии ҳамзамон аз сӯйи шохаҳои гуногун пешгирӣ шавад.
Агар дар дохили қисми критикӣ кӯшиш кунед, ки блоки дигарро ба даст оред, эҳтимол дорад, ки муноқиша (deadlock) ба вуҷуд ояд, махсусан агар тартиби гирифтани блокҳо назорат нашуда бошад.
Тавсия дода мешавад:
- Вақти нигоҳ доштани блокро кам кунед.
- Аз блокҳои дарунӣ ё дароз кардани тартиби гирифтани онҳо худдорӣ кунед.
Маслиҳат барои коди эҳтимолан хатарнок:
private readonly object lockA = new object();
private readonly object lockB = new object();
void Method()
{
lock (lockA)
{
// Дар дохили қисми критикӣ кӯшиш мекунем, ки блоки дигарро ба даст орем
lock (lockB)
{
// Кор бо захираҳо
}
}
}
Агар дигар шоха lockB-ро ба даст ояд ва кӯшиш кунад, ки lockA-ро ба даст орад, муноқиша (deadlock) ба вуҷуд меояд.