# Mutex vs Semafor

Adres: https://softwaredictionary.org/tr/karsilastirma/mutex-vs-semaphore
Son güncelleme: 2026-09-30

Kısaca: Mutex, paylaşılan kaynağı aynı anda tek bir iş parçacığına açar ve onu yalnızca alan bırakır; semafor ise en fazla N iş parçacığını içeri alan bir sayaçtır.

## Mutex ile semafor (semaphore) arasındaki fark nedir?

Mutex (karşılıklı dışlama kilidi, mutual exclusion lock) bir kritik bölümü korur: bir iş parçacığı onu kilitler, paylaşılan veriyle çalışır ve kilidi açar; diğer iş parçacıkları sıralarını bekler. Semafor ise kullanılabilir izinlerin bir sayacını tutar: `acquire` (wait ya da P de denir) sayacı azaltır ve sıfırda bloklar, `release` (signal ya da V) ise sayacı artırır ve bekleyen bir iş parçacığını uyandırır.

Temel farklar sahiplik ve sayıdır. Mutex'in bir sahibi vardır ve yalnızca onu kilitleyen iş parçacığı kilidi açmalıdır; bu, sistemlerin hataları tespit etmesini ve öncelik terslenmesini (priority inversion) ele almasını sağlar. Semaforun sahibi yoktur ve aynı anda birden çok tutucuya izin verebilir; bu yüzden veritabanı bağlantıları gibi N kaynaklık bir havuza erişimi sınırlamaya ya da bir iş parçacığının bırakıp diğerinin aldığı iş parçacıkları arası sinyalleşmeye uygundur.

Çoğu zaman yan yana kullanılırlar. Üreticiler ve tüketiciler arasındaki sınırlı bir kuyruk, genellikle kuyruğun kendisini korumak için bir mutex'i, boş yuvaları ve dolu öğeleri izlemek için de iki sayan semaforu kullanır. Birçok dil, kanallar ve bağlantı havuzları gibi daha üst düzey araçları da bu iki ilkelin üzerine kurar.

Sık yapılan bir yanlış, sayısı 1 olan ikili bir semaforun mutex ile aynı olduğu düşüncesidir. O da aynı anda tek bir tutucuya izin verir, ama herhangi bir iş parçacığı onu bırakabilir ve sahibi yoktur; bu yüzden bir iş parçacığının başkasının kilidini açmasını yakalayamaz ve özyinelemeli kilitleme ile öncelik kalıtımı gibi özellikleri destekleyemez.

| Özellik | Mutex | Semaphore |
| --- | --- | --- |
| Nedir | Sahibi olan bir kilit | Kullanılabilir izinlerin sayacı |
| Aynı anda tutucular | Tam olarak bir | En fazla N, yani başlangıç sayısı kadar |
| Kim bırakır | Yalnızca onu kilitleyen iş parçacığı | Herhangi bir iş parçacığı |
| Ana amaç | Paylaşılan veriyi eşzamanlı değişikliklerden korumak | N kaynağa erişimi sınırlamak ya da iş parçacıkları arasında sinyal vermek |
| İşlemler | lock ve unlock | acquire (wait, P) ve release (signal, V) |
| Ek özellikler | Çoğu zaman özyinelemeli kilitleme ve öncelik kalıtımı | Olayları sayabilir, üreticileri ve tüketicileri koordine edebilir |
| Tipik kullanım | Paylaşılan bir sayacı, haritayı ya da dosyayı güncellemek | Bağlantı havuzları, eşzamanlılık sınırları, sınırlı kuyruklar |

## Mutex şu durumlarda doğru seçim

- Aynı anda yalnızca bir iş parçacığı paylaşılan bir veri parçasına dokunabilmeli.
- Kilitleyen iş parçacığı her zaman kilidi açan olmalı.
- Gerçek zamanlı sistemlerde öncelik terslenmesine karşı korumaya ihtiyacınız var.

## Semaphore şu durumlarda doğru seçim

- En fazla N iş parçacığı bir kaynak havuzunu aynı anda kullanabilmeli.
- Bir iş parçacığının diğerine işin hazır olduğunu bildirmesi gerekiyor.
- Paralel indirmeler ya da API çağrıları gibi eşzamanlılığı sınırlamak istiyorsunuz.

## Sık sorulan sorular

**İkili semafor, mutex ile aynı şey mi?**

Tam olarak değil. İkisi de aynı anda bir tutucuya izin verir, ama mutex'in kilidi açması gereken bir sahibi vardır; ikili semaforu ise herhangi bir iş parçacığı bırakabilir.

**Mutex yerine semaforu ne zaman kullanmalıyım?**

Birden fazla iş parçacığının aynı anda ilerleyebildiği durumlarda, örneğin işi beş veritabanı bağlantısıyla sınırlamak gibi, ya da bir iş parçacığının diğerine sinyal vermesi gerektiğinde semafor kullanın. Paylaşılan veriyi korumak için mutex kullanın.

**Mutex kilitlenmeye (deadlock) neden olabilir mi?**

Evet. İki iş parçacığı birer mutex tutup diğerinin mutex'ini bekliyorsa hiçbiri devam edemez. Kilitleri her zaman aynı sırayla almak, bunu önlemenin yaygın bir yoludur.

---

Software Dictionary: https://softwaredictionary.org/tr · https://softwaredictionary.org/tr/llms.txt
