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