Un mutex è un lock che garantisce la mutua esclusione — un solo thread può detenerlo ed entrare nella sezione critica protetta alla volta. Un semaforo generalizza questo concetto permettendo fino a N detentori concorrenti.
Un mutex è un lock che garantisce la mutua esclusione — un solo thread può detenerlo ed entrare nella sezione critica protetta alla volta. Un semaforo generalizza questo concetto permettendo fino a N detentori concorrenti.
acquire() decrementa (si blocca a 0), release() incrementa. Un mutex è essenzialmente un semaforo con N=1 ma con semantica di proprietà.lock = threading.Lock()
def transfer(a, b, amt):
with lock: # sezione critica — un thread alla volta
a.balance -= amt
b.balance += amt
# Semaforo: limita a 10 le connessioni DB concorrenti
sem = threading.Semaphore(10)
def query():
with sem: # fino a 10 thread eseguono questo concorrentemente
db.execute(...)
with/RAII/defer così il rilascio è automatico anche in caso di eccezioni.Questi sono gli strumenti quotidiani per proteggere lo stato condiviso. I mutex serializzano l'accesso per prevenire le race; i semafori limitano un pool di risorse (connessioni, permessi, rate limit). Scegliere la primitiva giusta e mantenere brevi le sezioni critiche è la differenza tra corretto-e-veloce e corretto-ma-lento.
Una raccolta di domande di colloquio IT con risposte dettagliate — da Junior a Senior.
Dona