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(veyaP,kazanmak): Sayacı azaltır. Sayı negatif hale gelirse, akış engellenir ve başka bir akışsignalyapana kadar bekler.signal(veyaV,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 {
// ...
}