Um mutex é um lock que garante exclusão mútua — apenas uma thread pode segurá-lo e entrar na seção crítica protegida por vez. Um semáforo generaliza isso para permitir até N detentores concorrentes.
Um mutex é um lock que garante exclusão mútua — apenas uma thread pode segurá-lo e entrar na seção crítica protegida por vez. Um semáforo generaliza isso para permitir até N detentores concorrentes.
acquire() decrementa (bloqueia em 0), release() incrementa. Um mutex é essencialmente um semáforo com N=1, mas com semântica de posse.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 para que a liberação seja automática mesmo em exceções.Estas são as ferramentas do dia a dia para proteger estado compartilhado. Mutexes serializam o acesso para prevenir races; semáforos regulam um pool de recursos (conexões, permits, rate limits). Escolher a primitiva certa e manter as seções críticas curtas é a diferença entre correto-e-rápido e correto-mas-lento.
Uma biblioteca de perguntas de entrevista de TI com respostas detalhadas — de Júnior a Sênior.
Doar