Junior — Middle
Çox iplikli proqramlaşdırmada semaforun işləmə prinsipini izah edə bilərsinizmi?
sobes.tech Süni İntellekt
AI-dan cavab
Bir semafor çox ipli proqramlaşdırmada sinxronizasiya mexanizmi olub, ümumi resursa girişə nəzarət edir. O, sayğac saxlayır və bu sayğac, eyni zamanda neçə ipçinin resursa daxil ola biləcəyini göstərir.
İş prinsipi:
- Əvvəlcə, semaforun sayğacı mövcud resursların sayına bərabər olaraq qurulur.
- Bir ipçi daxil olmaq istədikdə, "wait" (və ya "acquire") əməliyyatını çağırır, bu da sayğacı 1 azaldır.
- Əgər sayğac mənfiyə düşərsə, ipçi bloklanır və başqa bir ipçinin resursu boşaltmasını gözləyir.
- Bir ipçi resursu boşaldıqda, "signal" (və ya "release") əməliyyatını çağırır, bu da sayğacı 1 artırır və gözləyən ipçiləri açır.
Swift-də DispatchSemaphore ilə nümunə:
let semaphore = DispatchSemaphore(value: 2) // eyni zamanda 2 ipçinin işləməsinə icazə verir
DispatchQueue.global().async {
semaphore.wait() // giriş üçün cəhd
print("İpçi işləməyə başladı")
sleep(2) // işin simulasyonu
print("İpçi işi bitirdi")
semaphore.signal() // resursu boşaldır
}
Bu şəkildə, semafor ümumi resursla işləyən ipçilərin sayını məhdudlaşdırmağa kömək edir, yarış şərtlərini qarşısını alır və məlumatların bütövlüyünü təmin edir.