Sobes.tech
Junior — Middle

Ինչպե՞ս են համակարգերը կառավարում այն իրավիճակը, երբ մի քանի հոսքեր միաժամանակ դիմում են ընդհանուր փոփոխականին կամ վիճակին։

sobes.tech AI

Պատասխան AI-ից

Երբ մի քանի հոսքեր միաժամանակ դիմում են ընդհանուր փոփոխականի կամ վիճակի, առաջանում է մրցակցության պայման (race condition): Թե սխալ տվյալների կանխարգելման և ճշգրտության ապահովման համար, կիրառվում են սինխրոնիզացիայի մեխանիզմներ՝

  • Բլոկավորումներ (lock, mutex) — թույլ են տալիս մեկ հոսքին բացառիկ իրավունք ունենալ ռեսուրսի վրա, մյուսները սպասում են:
  • Monitors (Monitor.Enter/Exit C#-ում) — ավելի ճկուն բլոկավորման մեխանիզմ:
  • lock բառը C#-ում — պարզեցված սինտաքսիս մոնիտորների համար:
  • Ատոմիկ օպերացիաներ (Interlocked) — պարզ օպերացիաների համար առանց լրիվ բլոկավորման:
  • Համաժամանակյա հավաքածուներ — հոսքային անվտանգ տվյալների կառուցվածքներ:

Օրինակ՝ lock-ի օգտագործմամբ C#-ում:

private readonly object _sync = new object();
private int _counter = 0;

public void Increment()
{
    lock(_sync)
    {
        _counter++;
    }
}

Այս մոտեցումը երաշխավորում է, որ միայն մեկ հոսք փոփոխում է փոփոխականը միաժամանակ։