Middle
GCD колдонуп, агымдардын атаандаштыгын кантип жоюуга болот?
sobes.tech AI
AIден жооп
GCD (Grand Central Dispatch) колдонуп жатканда, атаандаштык шарттарды алдын алуу үчүн жалпы ресурстарга кирүүнү синхрондоштуруу колдонулат. Негизги жактар:
-
Сериялык (serial) кезектерди колдонуу: эгер бардык операциялар жалпы ресурстагы бир сериялык кезекте аткарылса, алар кезек-кезеги аткарылат жана бир убакта кирүү алдын алынат.
-
Барьерлерди (barrier blocks) колдонуу: конкурстук кезектерде барьерлер бардык мурдагы тапшырмалар аяктагандан кийин гана башталат жана кийинки тапшырмалар анын аяктагандан кийин башталат.
Мисал катары, ресурсты коргоо үчүн сериялык кезекти колдонуу:
let serialQueue = DispatchQueue(label: "com.example.serialQueue")
var sharedResource = 0
func incrementResource() {
serialQueue.async {
sharedResource += 1
print("Ресурс көбөйдү \(sharedResource)")
}
}
Ошентип, sharedResource менен операциялар бир убакта аткарылбайт, бул атаандаштык шарттарды алдын алат.