Sobes.tech
Junior — Middle

Semafor nima va u qanday qilib jarayonlarni sinxronlashtirish uchun ishlatilishini tushuntirib berolasizmi?

sobes.tech AI

AIdan javob

Semafor — bu ko‘p iptida yoki ko‘p jarayonli muhitda umumiy resursga kirishni boshqarish uchun ishlatiladigan sinxronizatsiya mexanizmi. U hisoblagichni o‘z ichiga oladi, bu hisoblagich bir vaqtning o‘zida resursga kirishi mumkin bo‘lgan ip yoki jarayonlar sonini ko‘rsatadi.

Ishlash prinsipi:

  • Dastlab, semafor hisoblagichi mavjud resurslar soniga o‘rnatiladi.
  • Bir ip kirishni istaganda, u wait (yoki acquire) operatsiyasini chaqiradi, bu hisoblagichni kamaytiradi.
  • Agar hisoblagich noldan kichik bo‘lsa, ip bloklanadi va resurs bo‘shatilishini kutadi.
  • Ip resursni bo‘shatganda, u signal (yoki release) chaqiradi, bu hisoblagichni oshiradi va kutayotgan iplarni ochadi.

iOSda, semaforlar bilan ishlash uchun ko‘pincha GCD ning DispatchSemaphore sinfi ishlatiladi:

let semaphore = DispatchSemaphore(value: 1) // 1, resurs bir ip uchun mavjudligini bildiradi

// Iptda:
semaphore.wait()   // resurs mavjud bo‘lishini kutadi
// Resurs bilan ishlash
semaphore.signal() // resursni bo‘shatadi

Shu tarzda, semaforlar raqobat shartlarini oldini olishga yordam beradi va umumiy resurslarga to‘g‘ri kirishni ta’minlaydi.