Mutex ile semaphore arasındaki fark nedir?
Cevap
Her ikisi de paylaşılan kaynaklara eşzamanlı erişimi kontrol eden senkronizasyon araçlarıdır.
Mutex (mutual exclusion)
- Kritik bölgeye aynı anda yalnızca bir thread girer.
- Sahipliği vardır: kilidi alan thread bırakmalıdır.
- Bazı implementasyonlar priority inheritance ve recursive kilitleme destekler.
Semaphore
- Bir sayaç tutar.
wait()(P, acquire) sayacı azaltır, sıfırsa bekletir;signal()(V, release) artırır. - Counting semaphore: N adet kaynağa aynı anda N erişim (ör. 10 bağlantılık havuz).
- Binary semaphore: 0/1, mutex'e benzer ama sahiplik yoktur; başka bir thread
signalverebilir. Bu yüzden olay bildirimi için de kullanılır.
| Mutex | Semaphore | |
|---|---|---|
| Eşzamanlı erişim | 1 | N |
| Sahiplik | Var | Yok |
| Tipik amaç | Kritik bölgeyi korumak | Sınırlı kaynak sayısını yönetmek, thread'ler arası sinyal |
import threading
lock = threading.Lock()
counter = 0
def increment():
global counter
with lock: # mutex: tek thread
counter += 1
db_slots = threading.Semaphore(5)
def query():
with db_slots: # aynı anda en fazla 5 thread
run_query()Benzer araçlar: read-write lock (çok okuyucu veya tek yazar), condition variable (bir koşul gerçekleşene kadar bekleme), spinlock (kısa bekleme için uyumadan döngüde bekleme).
İlgili İşletim Sistemleri soruları
- Concurrency ile parallelism arasındaki fark nedir?
- Race condition nedir? Bir örnekle nasıl önleneceğini gösterin.
- Context switch nedir? Neden maliyetlidir?
- Virtual memory ve paging nasıl çalışır? Page fault nedir?
- Deadlock nedir? Oluşması için gereken dört koşul nelerdir ve nasıl önlenir?
- Process ile thread arasındaki fark nedir?
Bu konuda başka bir soru biliyor musun?
Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.