En mutex är ett lås som garanterar ömsesidig uteslutning (mutual exclusion) — bara en tråd kan hålla det och gå in i den skyddade kritiska sektionen åt gången. En semafor generaliserar detta till att tillåta upp till N samtidiga innehavare.
En mutex är ett lås som garanterar ömsesidig uteslutning (mutual exclusion) — bara en tråd kan hålla det och gå in i den skyddade kritiska sektionen åt gången. En semafor generaliserar detta till att tillåta upp till N samtidiga innehavare.
acquire() minskar (blockerar vid 0), release() ökar. En mutex är i grunden en semafor med N=1 men med ägarsemantik.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 så att frisläppning sker automatiskt även vid undantag.Detta är de vardagliga verktygen för att skydda delat tillstånd. Mutexar serialiserar åtkomst för att förhindra races; semaforer stryper en resurspool (anslutningar, tillstånd, rate limits). Att välja rätt primitiv och hålla kritiska sektioner korta är skillnaden mellan korrekt-och-snabbt och korrekt-men-långsamt.
Ett bibliotek med IT-intervjufrågor och detaljerade svar — från Junior till Senior.
Donera