Middle
Kuidas eemaldada võistlused GCD kasutamisel paralleelselt töötavate lõngade puhul?
sobes.tech AI
Vastus AI-lt
GCD (Grand Central Dispatch) kasutamisel konkurentsi tingimuste vältimiseks jagatud ressurssidele juurdepääsu sünkroniseerimisega. Peamised lähenemised:
-
Kasutades järjestikuseid (serial) järjekordi: kui kõik operatsioonid jagatud ressursiga toimuvad ühes järjestikuses järjekorras, täidetakse need järjestikku, vältides samaaegset juurdepääsu.
-
Kasutades barjääre (barrier blocks) konkurentsijärjekordades: barjääri eesmärk on tagada, et kõik eelnevad ülesanded lõpetatakse enne barjääri algust ning järgmised ülesanded algavad pärast seda.
Näide järjestikuse järjekorra kasutamisest ressursi kaitsmiseks:
let serialQueue = DispatchQueue(label: "com.example.serialQueue")
var sharedResource = 0
func incrementResource() {
serialQueue.async {
sharedResource += 1
print("Ressurss suurendatud kuni \(sharedResource)")
}
}
Sellisel viisil ei tehta operatsioone sharedResource-ga samaaegselt, mis aitab vältida race condition olukordi.