Ein Mutex ist ein Lock, das gegenseitigen Ausschluss garantiert — nur ein Thread kann es halten und den geschützten kritischen Abschnitt gleichzeitig betreten. Ein Semaphor verallgemeinert dies, um bis zu N gleichzeitige Halter zuzulassen.
Ein Mutex ist ein Lock, das gegenseitigen Ausschluss garantiert — nur ein Thread kann es halten und den geschützten kritischen Abschnitt gleichzeitig betreten. Ein Semaphor verallgemeinert dies, um bis zu N gleichzeitige Halter zuzulassen.
acquire() dekrementiert (blockiert bei 0), release() inkrementiert. Ein Mutex ist im Wesentlichen ein Semaphor mit N=1, aber mit Besitzsemantik.lock = threading.Lock()
def transfer(a, b, amt):
with lock: # critical section — one thread at a time
a.balance -= amt
b.balance += amt
# Semaphore: cap concurrent DB connections at 10
sem = threading.Semaphore(10)
def query():
with sem: # up to 10 threads run this concurrently
db.execute(...)
with/RAII/defer, damit die Freigabe auch bei Ausnahmen automatisch erfolgt.Dies sind die alltäglichen Werkzeuge zum Schutz gemeinsamen Zustands. Mutexe serialisieren den Zugriff, um Races zu verhindern; Semaphore drosseln einen Ressourcenpool (Verbindungen, Permits, Rate Limits). Das richtige Primitiv zu wählen und kritische Abschnitte kurz zu halten ist der Unterschied zwischen korrekt-und-schnell und korrekt-aber-langsam.
Eine Sammlung von IT-Interviewfragen mit ausführlichen Antworten — vom Junior bis zum Senior.
Spenden