# Mutex (Karşılıklı Dışlama (Mutual Exclusion))

Adres: https://softwaredictionary.org/tr/terimler/mutex
Kategori: İşletim Sistemleri
Son güncelleme: 2026-09-30
Okunuşu: myuteks

Kısaca: Mutex, kodun kritik bir bölümüne aynı anda yalnızca bir thread'in girmesine izin veren bir kilittir; thread'ler paylaşılan veriyi aynı anda değiştirip bozamaz.

## Mutex nedir?

Mutual exclusion'ın (karşılıklı dışlama) kısaltması olan mutex, paylaşılan verinin aynı anda birkaç thread tarafından kullanılmasını önleyen bir senkronizasyon aracıdır. Bir thread veriye dokunmadan önce mutex'i kilitler (acquire) ve sonra kilidi açar (release). Başka bir thread mutex'i zaten tutuyorsa çağıran, serbest bırakılana kadar bekler. Kilitleme ile kilit açma arasındaki koda kritik bölüm (critical section) denir.

Arka planda mutex, kilidi güvenle almak için compare-and-swap gibi atomik CPU komutlarını, ayrıca bekleyen thread'lerin dönüp CPU zamanı yakmak yerine uyutulması için işletim sisteminin yardımını kullanır. Mutex'in bir sahibi vardır: yalnızca onu kilitleyen thread kilidi açmalıdır. Çoğu dil bir tane sağlar; Python'da `threading.Lock`, C++'ta `std::mutex`, Go'da `sync.Mutex` ve Rust'ta verinin kendisini sarmalayan ve kilitlemeden erişilemeyen `Mutex<T>` gibi.

Mutex, bir kafenin tuvaletinin tek anahtarı gibidir: anahtarı alan içeri girer ve herkes anahtar geri gelene kadar sırada bekler. Mutex'ler paylaşılan sayaçları, bellek içi önbellekleri, açık bağlantı listelerini ve aynı dosyaya yazmaları korur.

Mutex çoğu zaman semaphore ile karıştırılır. Mutex tam olarak bir tutucuya izin verir ve bir sahibi vardır; semaphore ise aynı anda birkaç thread'i içeri alabilen ve herhangi bir thread tarafından serbest bırakılabilen bir sayaçtır. İlgili hataları ayrı tutmak da yardımcı olur: yarış durumu (race condition) mutex'in önlediği hatadır, deadlock ise dikkatsiz mutex kullanımının yol açabileceği hatadır; iki thread'in her biri bir mutex tuttuğunda ve sonsuza dek diğerinin mutex'ini beklediğinde ortaya çıkar. Kritik bölümleri kısa tutun ve kilidi `with`, `defer` veya kapsamlı koruyucular (scoped guard) gibi yapılarla otomatik olarak serbest bırakın.

## Önemli noktalar

- Mutex, bir kritik bölümü aynı anda yalnızca bir thread'in çalıştırmasına izin verir.
- Mutex'i kilitli bulan thread'ler serbest bırakılana kadar bekler.
- Bir mutex'i yalnızca onu kilitleyen thread açmalıdır.
- Mutex'ler yarış durumlarını önler ama yanlış kullanılırsa deadlock'a yol açabilir.
- Kritik bölümleri kısa tutun ve hatalarda bile kilidi her zaman serbest bırakın.

## Örnek: Python'da paylaşılan bir sayacı korumak

```python
import threading

counter = 0
lock = threading.Lock()  # Python's mutex

def add_many():
    global counter
    for _ in range(100_000):
        with lock:        # acquire; released automatically at the end
            counter += 1  # critical section: one thread at a time

threads = [threading.Thread(target=add_many) for _ in range(4)]
for t in threads: t.start()
for t in threads: t.join()
print(counter)  # always 400000
```

## Sık sorulan sorular

**Mutex ile semaphore arasındaki fark nedir?**

Mutex tam olarak bir thread'i içeri alır ve onu alan thread tarafından serbest bırakılmalıdır. Semaphore ise bir izin sayısı tutar; bu yüzden aynı anda birkaç thread'i içeri alabilir ve herhangi bir thread onu serbest bırakabilir.

**Kritik bölüm (critical section) nedir?**

Kritik bölüm, paylaşılan veriye erişen ve aynı anda birden fazla thread tarafından çalıştırılmaması gereken bir kod parçasıdır. Mutex, onu korumanın olağan yoludur.

**Spinlock nedir?**

Spinlock, bekleyen bir thread'in uyumak yerine kilidi sıkı bir döngüde tekrar tekrar kontrol ettiği bir kilittir. Yalnızca kilitler çok kısa süre tutulduğunda verimlidir; bu yüzden çoğunlukla kernel'ların içinde kullanılır.

---

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