Sobes.tech
Junior — Middle

Hansı vəziyyətlərdə iş parçalarının sinxronizasiyası üçün Semaphore mexanizmasından istifadə etmək məsləhətdir?

sobes.tech Süni İntellekt

AI-dan cavab

Semaphore (semafor) mexanizmi, müəyyən bir resursa və ya kritik bölməyə eyni vaxtda daxil olan iş parçacığı sayını məhdudlaşdırmaq üçün istifadə olunur.

Semaforu istifadə etmək məsləhətdir, məsələn:

  • Eyni vaxtda həyata keçirilən əməliyyatların sayını məhdudlaşdırmaq üçün, məsələn, əlaqə hovuzuna və ya məhdud sayda fayla giriş.
  • Sistemə yüklənmənin qarşısını almaq üçün paralelliyi idarə etmək.
  • Bir neçə iş parçacığının resursun boşaldılmasını gözləməsi lazım olduqda sinxronizasiya.

iOS-da semaforlar çox vaxt asinxron tapşırıqları idarə etmək üçün istifadə olunur, məsələn, bir neçə əməliyyatın tamamlanmasını gözləmək və ya eyni vaxtda yerinə yetirilən tapşırıqların sayını məhdudlaşdırmaq.

Swift-də DispatchSemaphore istifadə nümunəsi:

let semaphore = DispatchSemaphore(value: 3) // maksimum 3 iş parçacığı eyni vaxtda

func accessResource() {
    semaphore.wait() // sayacı azaldır, 0 olarsa, iş parçacığı bloklanır
    // Resursla işləmək
    print("İş parçacığı giriş aldı")
    sleep(1) // işin simulyasiyası
    semaphore.signal() // sayacı artırır, yer açır
}

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

Bu nümunədə, eyni vaxtda ən çox 3 iş parçacığı resursla işləyə bilər.