Un mutex este un lock care garantează excluderea mutuală — un singur thread îl poate deține și intra în secțiunea critică protejată odată. Un semafor generalizează asta pentru a permite până la N deținători concurenți.
Un mutex este un lock care garantează excluderea mutuală — un singur thread îl poate deține și intra în secțiunea critică protejată odată. Un semafor generalizează asta pentru a permite până la N deținători concurenți.
acquire() decrementează (se blochează la 0), release() incrementează. Un mutex este în esență un semafor cu N=1, dar cu semantică de deținere.lock = threading.Lock()
def transfer(a, b, amt):
with lock: # secțiune critică — un thread odată
a.balance -= amt
b.balance += amt
# Semafor: limitează conexiunile DB concurente la 10
sem = threading.Semaphore(10)
def query():
with sem: # până la 10 thread-uri rulează asta concurent
db.execute(...)
with/RAII/defer ca eliberarea să fie automată chiar și la excepții.Acestea sunt uneltele de zi cu zi pentru protejarea stării partajate. Mutex-urile serializează accesul pentru a preveni race-urile; semafoarele limitează un pool de resurse (conexiuni, permise, rate limits). Alegerea primitivei potrivite și menținerea secțiunilor critice scurte fac diferența dintre corect-și-rapid și corect-dar-lent.
O bibliotecă de întrebări de interviu IT cu răspunsuri detaliate — de la Junior la Senior.
Donează