Sobes.tech
Middle+

Semaphore Senkronizasyon Primi Nedir?

sobes.tech yapay zeka

AI'dan gelen yanıt

Semaphore — sınırlı bir kaynak havuzuna erişimi yöneten bir senkronizasyon primitive'idir. Bir sayaç tutar ve bu sayaç, aynı anda kaç iş parçacığının kaynağa erişebileceğini belirler.

Ana işlemler:

  • WaitOne (veya asenkron kod için WaitAsync): Sayaç sıfırdan büyükse azaltır. Sayaç sıfıra eşitse, diğer iş parçacığı Release çağırana kadar engellenir.
  • Release: Sayaç değerini artırır ve bekleyen iş parçacığını serbest bırakabilir.

Semaphore türleri:

  • Semaphore: Sistem genelinde (adlı veya adı olmayan), süreçler arasında kullanılabilir.
  • SemaphoreSlim: Hafif bir uygulama, süreç içinde kullanım için tasarlanmıştır. Süreç içi senkronizasyon için tercih edilir.

SemaphoreSlim kullanımı örneği:

// semaphoreSlim, bir kaynağa eşzamanlı erişimi sınırlamak için kullanılabilir
// Bu durumda, aynı anda 2 iş parçacığı izinlidir
private static SemaphoreSlim semaphoreSlim = new SemaphoreSlim(2);

public async Task AccessResourceAsync()
{
    // Semaforun serbest bırakılmasını bekler
    await semaphoreSlim.WaitAsync();
    try
    {
        // Sınırlı kaynağa erişim
        Console.WriteLine($"{Thread.CurrentThread.ManagedThreadId} kaynağa erişiyor");
        await Task.Delay(1000); // Kaynakla çalışma simülasyonu
    }
    finally
    {
        // Semaforu serbest bırakır
        Console.WriteLine($"{Thread.CurrentThread.ManagedThreadId} kaynağı serbest bırakıyor");
        semaphoreSlim.Release();
    }
}