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çinWaitAsync): 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();
}
}