Sobes.tech
Junior — Middle

Koji mehanizmi obezbeđuju sigurnu radnju sa asinhronim kodom i sprečavaju trke uslova pri korišćenju async/await?

sobes.tech АИ

Одговор од АИ

Za siguran rad sa asinhronim kodom i sprečavanje uslova trke pri korišćenju async/await na iOS (Swift), koriste se sledeći mehanizmi:

  • Serializacija pristupa zajedničkim resursima: korišćenje redova (DispatchQueue) sa barijerama ili sekvencijalnih redova za sinhronizaciju.
  • Glumci (Actors): u Swift-u, glumci obezbeđuju izolaciju stanja i sekvencijalni pristup tome, čime se sprečavaju uslovi trke.
  • Korišćenje Task i await sa pravilnim upravljanjem kontekstom izvršenja: da bi se izbegao istovremeni pristup istim podacima.

Primer sa korišćenjem glumaca:

actor Counter {
    private var value = 0

    func increment() {
        value += 1
    }

    func getValue() -> Int {
        return value
    }
}

let counter = Counter()
Task {
    await counter.increment()
    print(await counter.getValue())
}

Ovde, glumac garantuje da će pristup value biti sekvencijalni, čime se izbegavaju uslovi trke.