Middle
Qanday asoslangan barlar va semaforlar?
sobes.tech AI
AIdan javob
Paralel dasturlash kontekstida to`sarilar va semaforlar sinxronizatsiya mexanizmlariga asoslanadi:
-
Semaforlar: Atom operatsiyalariga asoslanadi. Asosiy operatsiyalar:
wait(yokiP,sotib olish): Hisoblagichni kamaytiradi. Agar hisoblagich manfiy bolsa, oqim bloklanadi va boshqa oqimsignal`ni bajarishi bilan ochiladi.signal(yokiV,erkin qilish): Hisoblagichni oshiradi. Agar bloklangan oqimlar bolsa, ularning biri uygonadi.- Semaforlar binar yoki hisoblovchi bo
lishi mumkin (cheklangan sonli oqimlar resursga kirish huquqiga ega bolishi uchun).
-
Barierlar: Barcha ishtirokchilar kutish mexanizmasiga asoslangan. Barierga yetgan oqim bloklanadi, barcha ishtirokchilar ham bu barierga yetgach, ular bir vaqtda davom etadi.
iOS/macOS dasturlashda, bu konseptlar GCD (Grand Central Dispatch) va OperationQueue kabi frameworklar yordamida amalga oshiriladi.
Masalan, GCDda:
// DispatchSemaphore misoli
let semaphore = DispatchSemaphore(value: 1) // Binar semafor
// Wait (sotib olish)
semaphore.wait()
// Kritik bo`limga kirish
semaphore.signal() // Signal (erkin qilish)
GCDdagi barierlar, parallel navbatlar uchun barrier vazifalari (barrier tasks) yordamida amalga oshiriladi:
let concurrentQueue = DispatchQueue(label: "com.example.concurrentQueue", attributes: .concurrent)
// Oddiy vazifalar
concurrentQueue.async {
// ...
}
// Barier vazifa - faqat oldingi barcha oddiy vazifalar tugagach bajariladi
// Va bu vazifa tugagach, yangi vazifalar boshlanmaydi
concurrentQueue.async(flags: .barrier) {
// ...
}
// Oddiy vazifalar, barier vazifa tugagach boshlanadi
concurrentQueue.async {
// ...
}