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 {
// ...
}