Middle
Kā novērst sacensības, izmantojot GCD, kad darbojas vairāki pavedieni?
sobes.tech AI
Atbilde no AI
GCD (Grand Central Dispatch) izmantošanā, lai novērstu sacensību apstākļus konkurences darba laikā, tiek izmantota kopēju resursu piekļuves sinhronizācija. Galvenie pieejas veidi:
-
Izmantojot secīgas (serial) rindas: ja visas operācijas ar kopējo resursu tiek veiktas vienā secīgā rindā, tās tiks izpildītas secīgi, novēršot vienlaicīgu piekļuvi.
-
Izmantojot barjeras (barrier blocks) konkurējošās rindās: barjeras garantē, ka visas iepriekšējās uzdevumi ir pabeigti pirms barjeras sākuma, un nākamie uzdevumi sākas pēc tās pabeigšanas.
Piemērs, kā izmantot secīgu rindu resursa aizsardzībai:
let serialQueue = DispatchQueue(label: "com.example.serialQueue")
var sharedResource = 0
func incrementResource() {
serialQueue.async {
sharedResource += 1
print("Resurss palielināts līdz \(sharedResource)")
}
}
Tādējādi, operācijas ar sharedResource netiks izpildītas vienlaicīgi, novēršot sacensību apstākļus.