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.