Mutex je zámek, který zaručuje vzájemné vyloučení (mutual exclusion) — jen jedno vlákno jej může držet a vstoupit do chráněné kritické sekce v jeden okamžik. Semafor toto zobecňuje, aby umožnil až N souběžných držitelů.
Mutex je zámek, který zaručuje vzájemné vyloučení (mutual exclusion) — jen jedno vlákno jej může držet a vstoupit do chráněné kritické sekce v jeden okamžik. Semafor toto zobecňuje, aby umožnil až N souběžných držitelů.
acquire() snižuje (blokuje na 0), release() zvyšuje. Mutex je v podstatě semafor s N=1, ale se sémantikou vlastnictví.lock = threading.Lock()
def transfer(a, b, amt):
with lock: # kritická sekce — jedno vlákno v jeden okamžik
a.balance -= amt
b.balance += amt
# Semafor: omez souběžná DB připojení na 10
sem = threading.Semaphore(10)
def query():
with sem: # až 10 vláken toto spustí souběžně
db.execute(...)
with/RAII/defer, aby bylo uvolnění automatické i při výjimkách.Toto jsou každodenní nástroje pro ochranu sdíleného stavu. Mutexy serializují přístup, aby zabránily race conditions; semafory škrtí zdrojový pool (připojení, povolení, rate limity). Volba správného primitiva a udržování krátkých kritických sekcí je rozdíl mezi správně-a-rychle a správně-ale-pomalu.
Knihovna IT otázek k pohovoru s podrobnými odpověďmi — od Junior po Senior.
Přispět