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.