Middle
Programlama bağlamında semafor nedir?
sobes.tech yapay zeka
AI'dan gelen yanıt
Semafor, sınırlı bir kaynağa erişimi yöneten iş parçacığı senkronizasyonu için temel bir araçtır. Tam sayı sayacı tutar.
Ana işlemler:
wait()(veyaP/al) : Sayacı 1 azaltır. Sayı negatif hale gelirse, diğer iş parçacığısignal()yapana kadar engellenir.signal()(veyaV/serbest bırak) : Sayacı 1 artırır. Engellenmiş iş parçacıkları varsa, biri serbest bırakılır.
Semafor türleri:
- İkili semafor (mutex) : Sayaç 0 veya 1 alır. Sadece bir iş parçacığının kaynağa aynı anda erişmesini sağlar.
- Sayısal semafor : Sayaç 0 ile N arasında değer alabilir. Sınırlı sayıda erişilebilir öğeye sahip kaynak havuzuna erişimi yönetmek için kullanılır.
Swift'te aynı anda çalışan görevlerin sayısını sınırlamak için örnek:
// En fazla 3 eşzamanlı erişime izin veren semafor oluşturma
let semaphore = DispatchSemaphore(value: 3)
DispatchQueue.global().async {
// Görev 1
semaphore.wait() // Sayacı azaltır, 3'ten fazla görev çalışıyorsa bekler
print("Görev 1 başladı")
Thread.sleep(forTimeInterval: 2) // Çalışmayı taklit eder
print("Görev 1 tamamlandı")
semaphore.signal() // Sayacı artırır, bekleyen görevleri serbest bırakır
}
DispatchQueue.global().async {
// Görev 2
semaphore.wait()
print("Görev 2 başladı")
Thread.sleep(forTimeInterval: 3)
print("Görev 2 tamamlandı")
semaphore.signal()
}
DispatchQueue.global().async {
// Görev 3
semaphore.wait()
print("Görev 3 başladı")
Thread.sleep(forTimeInterval: 1)
print("Görev 3 tamamlandı")
semaphore.signal()
}
DispatchQueue.global().async {
// Görev 4 (bir yer boşalana kadar bekleyecek)
semaphore.wait()
print("Görev 4 başladı")
Thread.sleep(forTimeInterval: 2)
print("Görev 4 tamamlandı")
semaphore.signal()
}
// Tüm görevlerin tamamlanmasını bekle (demo amaçlı)
// Gerçek kodda daha güvenilir bekleme mekanizmaları kullanın
Thread.sleep(forTimeInterval: 5)