Sobes.tech
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.