Sobes.tech
Middle

Hogyan lehet kiküszöbölni a versenyhelyzeteket a GCD használatával történő párhuzamos szálmunkában?

sobes.tech MI

Válasz az MI-től

A GCD (Grand Central Dispatch) használatakor a versenyszituációk elkerülése érdekében a közös erőforrásokhoz való hozzáférés szinkronizálását alkalmazzuk. A fő megközelítések:

  • Szekvenciális (serial) sorok használata: ha minden művelet egy közös erőforrással egyetlen szekvenciális sorban történik, azok sorban hajtódnak végre, kizárva a párhuzamos hozzáférést.

  • Barriers (akadályok) alkalmazása párhuzamos sorokban: az akadályok garantálják, hogy minden korábbi feladat befejeződik, mielőtt az akadály elkezdődik, és a következő feladatok az akadály után indulnak.

Példa egy szekvenciális sor használatára egy erőforrás védelmében:

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

func incrementResource() {
    serialQueue.async {
        sharedResource += 1
        print("Az erőforrás növelve: \(sharedResource)")
    }
}

Így a sharedResource műveletek nem fognak egyidejűleg végrehajtódni, elkerülve a versenyszituációkat.