Sobes.tech
Middle

Engeller ve semaforler neye dayanır?

sobes.tech yapay zeka

AI'dan gelen yanıt

Paralel programlama bağlamında bariyerler ve semaforlar senkronizasyon mekanizmalarına dayanır:

  • Semaforlar: Sayacı üzerinde atomik işlemlere dayanır. Temel işlemler:

    • wait (veya P, kazanmak): Sayacı azaltır. Sayı negatif hale gelirse, akış engellenir ve başka bir akış signal yapana kadar bekler.
    • signal (veya V, serbest bırakmak): Sayacı artırır. Engellenmiş akışlar varsa, bunlardan biri uyanır.
    • Semaforlar ikili (değer 0 veya 1, mutex gibi davranır) veya sayısal (kaynağa erişebilecek sınırlı sayıda akışa izin verir) olabilir.
  • Barierler: Tüm katılımcıların beklediği bir mekanizmaya dayanır. Barier'e ulaşan akış, diğer tüm katılımcılar da bu noktaya ulaşana kadar engellenir. Tüm katılımcılar barier'e ulaştığında, hepsi aynı anda devam eder.

iOS/macOS geliştirmede, bu kavramlar GCD (Grand Central Dispatch) ve OperationQueue gibi framework'ler kullanılarak uygulanır.

Örneğin, GCD'de:

// DispatchSemaphore kullanımı örneği
let semaphore = DispatchSemaphore(value: 1) // İkili semafor

// Wait (kazanmak)
semaphore.wait()
// Kritik bölgeye erişim
semaphore.signal() // Signal (serbest bırakmak)

GCD'deki bariyerler, eşzamanlı kuyruklar için bariyer görevleri (barrier tasks) kullanılarak uygulanır:

let concurrentQueue = DispatchQueue(label: "com.example.concurrentQueue", attributes: .concurrent)

// Normal görevler
concurrentQueue.async {
    // ...
}

// Bariyer görevi - yalnızca önceki tüm normal görevler tamamlandığında çalışır
// Ve bu görev tamamlandıktan sonra, yeni görevler başlamaz
concurrentQueue.async(flags: .barrier) {
    // ...
}

// Normal görevler, bariyer görevi tamamlandıktan sonra başlar
concurrentQueue.async {
    // ...
}