Sobes.tech
Middle

Кедерги жана семафорлор эмне негизделген?

sobes.tech AI

AIден жооп

Параллелдүү программалоо контекстинде тоскоолдуктар жана семафорлор синхрондоштуруу механизмдерине негизделген:

  • Семафорлор: Атомардык операцияларга негизделген эсептегичтер. Негизги операциялар:

    • wait (же P, acquire): эсептегичти азайтат. Эсептегич терс болуп калса, агым токтоп калат, башка агым signal жасай турганча.
    • signal (же V, release): эсептегичти көбөйтөт. Эгер тоскоолдукка кабылган агымдар болсо, алардын бири ойгонуп калат.
    • Семафорлор бинардык (мааниси 0 же 1, мьютекс катары иштейт) же эсептөөчү (чектелген агымдарга ресурска кирүүгө мүмкүндүк берет).
  • Барьерлер (Barriers): Барьерге жеткен бардык катышуучулардын күтүүсүнө негизделген. Барьерге жеткен агым токтоп калат, башка катышуучулар да ошол жерге жеткенге чейин. Барьерге бардык жеткенде, алар бир убакта ишин улантат.

Бул концепциялар iOS/macOS иштеп чыгууда GCD (Grand Central Dispatch) жана OperationQueue фреймворкторунда ишке ашырылат:

Мисал үчүн, GCD:

// DispatchSemaphore колдонуу мисалы
let semaphore = DispatchSemaphore(value: 1) // Бинардык семафор

// Күтүү (acquire)
semaphore.wait()
// Критикалык бөлүмгө кирүү
semaphore.signal() // Ызгый сигнал (release)

GCD-деги барьерлер barrier tasks аркылуу ишке ашырылат:

let concurrentQueue = DispatchQueue(label: "com.example.concurrentQueue", attributes: .concurrent)

// Жөнөкөй тапшырмалар
concurrentQueue.async {
    // ...
}

// Барьердик тапшырма - ал бардык алдынкы тапшырмалар аяктагандан кийин гана ишке ашат
// жана андан кийин жаңы тапшырмалар башталбайт, докки ал аяктагандан кийин
concurrentQueue.async(flags: .barrier) {
    // ...
}

// Жөнөкөй тапшырмалар, алар барьер аяктагандан кийин ишке кирет
concurrentQueue.async {
    // ...
}