Sobes.tech
Junior — Middle

Qaysi holatlarda iplarni sinxronlashtirish uchun Semaphore mexanizmini qo'llash ma'qul?

sobes.tech AI

AIdan javob

Semaphore (semafor) mexanizmi resurs yoki kritik bo‘limga bir vaqtning o‘zida kiradigan oqimlar sonini cheklash uchun ishlatiladi.

Semaforni quyidagi hollarda qo‘llash maqsadga muvofiq:

  • Bir vaqtning o‘zida bajariladigan operatsiyalar sonini cheklash, masalan, ulanishlar havuziga kirish yoki cheklangan fayllar soni.
  • Tizimni ortiqcha yuklamaslik uchun parallelizmni nazorat qilish.
  • Bir nechta oqimlar resurs bo‘shatilishini kutishi kerak bo‘lsa, sinxronizatsiya qilish.

iOSda semaforlar ko‘pincha asinxron vazifalarni boshqarish uchun qo‘llanadi, masalan, bir nechta operatsiyaning yakunlanishini kutish yoki bir vaqtning o‘zida bajariladigan vazifalar sonini cheklash.

Swiftda DispatchSemaphore dan foydalanish misoli:

let semaphore = DispatchSemaphore(value: 3) // maksimal 3 oqim bir vaqtning o‘zida

func accessResource() {
    semaphore.wait() // hisoblagichni kamaytiradi, agar 0 bo‘lsa, oqim bloklanadi
    // Resurs bilan ishlash
    print("Oqim kirish oldi")
    sleep(1) // ishni simulyatsiya qilish
    semaphore.signal() // hisoblagichni oshiradi, joyni bo‘shatadi
}

for _ in 1...10 {
    DispatchQueue.global().async {
        accessResource()
    }
}

Ushbu misolda, bir vaqtning o‘zida faqat 3 oqim resurs bilan ishlay oladi.