Middle
Semafor ve mutex arasındaki fark nedir?
sobes.tech yapay zeka
AI'dan gelen yanıt
Mutex (Mutual Exclusion) — belirli bir zamanda yalnızca bir akışın kritik bölüm veya kaynağa erişimini garanti eden bir senkronizasyon mekanizmasıdır. Sahiplik ilkesiyle çalışır: mutex'i kilitleyen akış, onu serbest bırakmalıdır.
Semafor (Semaphore) — belirli bir sayıda "izin" ile sınırlı bir kaynağa erişimi yöneten daha genel bir senkronizasyon mekanizmasıdır. Akışlar, izin mevcutsa alabilir ve çalışmaya devam edebilir. Kaynak artık gerekmediğinde, izin geri verilir. Semaforun sahiplik kavramı yoktur; herhangi bir akış semafor sayacını artırabilir.
Ana farklar:
- Amaç: Mutex, münhasır erişim (bir akış) için kullanılır, semafor ise sınırlı sayıda kaynağa erişimi yönetir (birden fazla akış limite kadar).
- Sahiplik: Mutex'in sahibi (kilitleyen akış) vardır. Semaforun sahibi yoktur.
- Sayaç: Mutex, sayacı 1 olan bir semafor olarak düşünülebilir. Semaforun sayacı 1'den büyük olabilir.
- İşlemler: Mutex:
WaitOne/Pulse/ReleaseMutex. Semafor:WaitOne/Release.
İşte C#'ta semafor kullanımına basit bir örnek:
// Başlangıç değeri 2 ve maksimum 2 olan bir semafor oluşturuyoruz.
// Aynı anda 2 akışın kaynağa erişmesine izin verir.
SemaphoreSlim semaphore = new SemaphoreSlim(2, 2);
// Akış kaynağa erişmeye çalışıyor
semaphore.WaitOne();
// ... kaynakla çalışma ...
semaphore.Release(); // İzin serbest bırakılır
Mutex örneği:
// Mutex oluşturuyoruz
Mutex mutex = new Mutex();
// Akış münhasır erişim almaya çalışıyor
mutex.WaitOne();
// ... kritik bölümde çalışma ...
mutex.ReleaseMutex(); // Mutex serbest bırakılır (sadece sahibi tarafından)