Sobes.tech
Junior — Middle

Çok iş parçacıklı programlamada semaforun çalışma prensibini açıklayabilir misiniz?

sobes.tech yapay zeka

AI'dan gelen yanıt

Bir semafor, çok iş parçacıklı programlamada senkronizasyon mekanizmasıdır ve paylaşılan bir kaynağa erişimi kontrol eder. Bir sayaç içerir ve bu sayaç, aynı anda kaç iş parçacığının kaynağa erişebileceğini gösterir.

Çalışma prensibi:

  • Başlangıçta, semafor sayacı, mevcut kaynakların sayısına eşit olacak şekilde ayarlanır.
  • Bir iş parçacığı erişmek istediğinde, "wait" (veya "acquire") işlemini çağırır, bu da sayacı 1 azaltır.
  • Eğer sayaç sıfırın altına düşerse, iş parçacığı engellenir ve başka bir iş parçacığının kaynağı serbest bırakmasını bekler.
  • Bir iş parçacığı kaynağı serbest bıraktığında, "signal" (veya "release") işlemini çağırır, bu da sayacı 1 artırır ve bekleyen iş parçacıklarını serbest bırakır.

Swift'te DispatchSemaphore kullanımıyla örnek:

let semaphore = DispatchSemaphore(value: 2) // aynı anda 2 iş parçacığına izin verir

DispatchQueue.global().async {
    semaphore.wait() // erişim denemesi
    print("İş parçacığı çalışmaya başladı")
    sleep(2) // çalışma simülasyonu
    print("İş parçacığı çalışmayı bitirdi")
    semaphore.signal() // kaynağı serbest bırak
}

Bu şekilde, semafor, aynı anda paylaşılan bir kaynak üzerinde çalışan iş parçacığı sayısını sınırlandırmaya yardımcı olur, yarış koşullarını önler ve veri bütünlüğünü sağlar.