Sobes.tech
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 менен операциялар бир убакта аткарылбайт, бул атаандаштык шарттарды алдын алат.