En mutex er en lås som garanterer gjensidig utelukkelse (mutual exclusion) — bare én tråd kan holde den og gå inn i den beskyttede critical section om gangen. En semafor generaliserer dette til å tillate opptil N samtidige holdere.
En mutex er en lås som garanterer gjensidig utelukkelse (mutual exclusion) — bare én tråd kan holde den og gå inn i den beskyttede critical section om gangen. En semafor generaliserer dette til å tillate opptil N samtidige holdere.
acquire() reduserer (blokkerer ved 0), release() øker. En mutex er i praksis en semafor med N=1, men med eierskapssemantikk.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 slik at frigivelsen skjer automatisk selv ved unntak.Dette er de dagligdagse verktøyene for å beskytte delt tilstand. Mutexes serialiserer tilgang for å hindre races; semaforer struper en ressurspool (tilkoblinger, tillatelser, rate limits). Å velge riktig primitiv og holde critical sections korte er forskjellen mellom korrekt-og-rask og korrekt-men-treg.
Et bibliotek av IT-intervjuspørsmål med detaljerte svar — fra Junior til Senior.
Doner