Sobes.tech
Junior — Middle

Կարող եք բացատրել պայմանների մրցույթի կոնցեպցիան բազմաաթոռային միջավայրում և այն ինչպես կարող է ազդել ծրագրի աշխատանքի վրա?

sobes.tech AI

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

Մրցակցության պայման (race condition) առաջանում է, երբ մի քանի թելեր միաժամանակ մուտք են գործում և փոփոխում ընդհանուր տվյալները առանց համապատասխան սինխրոնիզացիայի։ Նման դեպքում տվյալների վերջնական վիճակը կարող է լինել անկանխատեսելի և կախված լինել թելերի կատարման կարգից։

Օրինակ, եթե երկու թելեր միաժամանակ ավելացնում են հաշվիչը, առանց լոկների, վերջնական արժեքը կարող է լինել փոքր, քան սպասվում էր, քանի որ ընթերցման և գրելու գործողությունները կարող են խաչվել։

iOS-ում, մրցակցության պայմանները կարող են հանգեցնել փլուզումների, UI-ի սխալ ցուցադրման կամ տվյալների վնասման։ Դրանցից խուսափելու համար օգտագործվում են սինխրոնիզացիայի մեխանիզմներ՝

  • GCD հերթեր serial հատկությամբ
  • NSLock, @synchronized
  • Ատոմիկ հատկություններ

GCD-ի օրինակ՝

let serialQueue = DispatchQueue(label: "com.example.serial")
var counter = 0

serialQueue.sync {
    counter += 1
}

Այսպիսով, փոփոխությունները counter-ում կատարվում են հերթականությամբ։