Sobes.tech
Middle

Semafor nedir?

sobes.tech yapay zeka

AI'dan gelen yanıt

Semafor, düşük seviyeli bir senkronizasyon primitive olup, kaynaklara erişimi kontrol eder. Bir sayaç tutar (kullanılabilir kaynak sayısı) ve iki temel işlemi vardır: bekleme (wait) ve sinyal verme (signal).

  • Bekleme (Wait / wait()): Sayacı azaltır. Eğer sayaç negatif hale gelirse (kullanılabilir kaynak kalmadığını gösterir), mevcut iş parçacığı engellenir ve başka bir iş parçacığı sinyal verdiğinde devam eder.
  • Sinyal (Signal / signal()): Sayacı artırır. Artırmadan sonra sayaç negatif değilse ve engellenmiş iş parçacıkları varsa, bunlardan biri serbest bırakılır.

Semaforlar şu amaçlarla kullanılabilir:

  • Paylaşılan kaynağa erişimi sınırlandırmak: Maksimum erişim sayısı ile başlatılır.
  • Görevleri senkronize etmek: Bir iş parçacığı, başka bir iş parçacığının belirli bir işlemi tamamlamasını bekleyebilir.

Darwin'de (iOS temelinde):

import Dispatch

// Sayaç değeri 1 olan bir semafor oluşturma (mutex'e benzer)
let semaphore = DispatchSemaphore(value: 1)

func accessResource() {
    // Erişimi bekle (sayaç 0 ise engeller)
    semaphore.wait()

    // Paylaşılan kaynağa erişim
    print("Kaynağa erişim sağlandı")

    // Erişimi sonlandır (sayaç artırılır)
    semaphore.signal()
    print("Kaynağa erişim sona erdi")
}

// Çok iş parçacıklı ortamda kullanım örneği
DispatchQueue.global().async {
    accessResource()
}

DispatchQueue.global().async {
    accessResource()
}

Semaforların temel türleri:

  • İkili semafor: Sayaç değeri sadece 0 veya 1 olabilir. Mutex'e benzer şekilde çalışır.
  • Sayaç semaforu: Sayaç değeri 1'den büyük olabilir, bu da aynı anda belirli sayıda iş parçacığının kaynağa erişimini sınırlar.
Semafor nedir? — iOS - sobes.tech