Sobes.tech
Middle

Kako eliminisati trke tokom konkurentnog rada niti koristeći GCD?

sobes.tech АИ

Одговор од АИ

U GCD (Grand Central Dispatch), za sprečavanje trkačkih uslova tokom konkurentnog rada koristi se sinhronizacija pristupa zajedničkim resursima. Glavni pristupi:

  • Korišćenje serijskih (serial) redova: ako se sve operacije sa zajedničkim resursom izvršavaju u jednom serijskom redu, one će se izvršavati redom, izbegavajući istovremeni pristup.

  • Korišćenje barijera (barrier blocks) u konkurentnim redovima: barijere garantuju da se sve prethodne zadaci završavaju pre početka barijere, a naredni zadaci počinju nakon nje.

Primer korišćenja serijskog reda za zaštitu resursa:

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

func incrementResource() {
    serialQueue.async {
        sharedResource += 1
        print("Resurs povećan na \(sharedResource)")
    }
}

Na ovaj način, operacije sa sharedResource neće se izvršavati istovremeno, čime se sprečavaju trkački uslovi.