Sobes.tech
Junior — Middle

Bir semaforun ne olduğunu ve süreçleri senkronize etmek için nasıl kullanıldığını açıklayabilir misiniz?

sobes.tech yapay zeka

AI'dan gelen yanıt

Semafor, çok iş parçacıklı veya çok işlemli ortamda ortak bir kaynağa erişimi yönetmek için kullanılan bir senkronizasyon mekanizmasıdır. Bir sayaç içerir ve bu sayaç, aynı anda kaç iş parçacığının veya işlemin kaynağa erişebileceğini gösterir.

Çalışma prensibi:

  • Başlangıçta, semafor sayacı kullanılabilir kaynak sayısına ayarlanır.
  • Bir iş parçacığı erişmek istediğinde, wait (veya acquire) işlemini çağırır, bu da sayacı azaltır.
  • Eğer sayaç sıfırın altına düşerse, iş parçacığı engellenir ve kaynağın serbest bırakılmasını bekler.
  • İş parçacığı kaynağı serbest bıraktığında, signal (veya release) çağırır, sayacı artırır ve bekleyen iş parçacıklarını serbest bırakır.

iOS'ta, semaforlarla çalışmak için genellikle GCD'den DispatchSemaphore sınıfı kullanılır:

let semaphore = DispatchSemaphore(value: 1) // 1, kaynağın bir iş parçacığı tarafından kullanılabilir olduğunu gösterir

// İş parçacığında:
semaphore.wait()   // kaynağın kullanılabilir olmasını bekler
// Kaynağa erişim
semaphore.signal() // kaynağı serbest bırakır

Bu şekilde, semaforlar yarış koşullarını önlemeye yardımcı olur ve paylaşılan kaynaklara doğru erişimi sağlar.