Sobes.tech
Junior — Middle

Көп жиптүү чөйрөдө массивге кирүүнүн коопсуздугун кантип камсыз кылса болот?

sobes.tech AI

AIден жооп

iOS (Swift) көп иштеген чөйрөдө массивге кирүүнү коопсуз кылуу үчүн адатта синхрондоштуруу механизмдери колдонулат, бул жарыш шарттары жана маалыматтардын бузулушун алдын алуу үчүн.

Негизги ыкмалар:

  1. DispatchQueue аркылуу кирүүнү сериалдаштыруу
let queue = DispatchQueue(label: "com.example.arrayQueue")
var array: [Int] = []

func appendElement(_ element: Int) {
    queue.sync {
        array.append(element)
    }
}

func getElement(at index: Int) -> Int? {
    return queue.sync {
        guard array.indices.contains(index) else { return nil }
        return array[index]
    }
}
  1. NSLock же башка блокировка механизмдерин колдонуу
let lock = NSLock()
var array: [Int] = []

func appendElement(_ element: Int) {
    lock.lock()
    array.append(element)
    lock.unlock()
}
  1. Окуу/жазуу үчүн барьерлер менен (Dispatch barriers) биргелешкен кезек колдонуу

Бул параллелдүү окууга мүмкүндүк берет, бирок жазуу кезекти блоктойт.

Ключ — массивге кирүүнү синхрондоштуруу аркылуу көзөмөлдөө, ошондо ар кандай жиптерден бирдей убакта өзгөртүүлөр болбойт.