Sobes.tech
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 (yoki P, sotib olish): Hisoblagichni kamaytiradi. Agar hisoblagich manfiy bolsa, oqim bloklanadi va boshqa oqim signal`ni bajarishi bilan ochiladi.
    • signal (yoki V, erkin qilish): Hisoblagichni oshiradi. Agar bloklangan oqimlar bolsa, ularning biri uygonadi.
    • Semaforlar binar yoki hisoblovchi bolishi 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 {
    // ...
}