Sobes.tech
Middle

Ako odstrániť závody pri konkurenčnej práci vlákien pomocou GCD?

sobes.tech AI

Odpoveď od AI

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 у једном серијском реду, они ће се извршавати редом, избегавајући истовремени приступ.

  • Korišћење баријера (barrier blocks) у конкуренцијским редовима: баријере гарантују да се све претходне задатке завршавају пре почетка баријере, а следећи задаци почињу након ње.

Пример коришћења серијског реда за заштиту ресурса:

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

func incrementResource() {
    serialQueue.async {
        sharedResource += 1
        print("Ресурс повећан на \(sharedResource)")
    }
}

На овај начин, операције са sharedResource неће се извршавати истовремено, што спречава тркаске услове.