A mutex egy lock, amely garantálja a kölcsönös kizárást (mutual exclusion) — egyszerre csak egy thread tarthatja és léphet be a védett critical sectionbe. A semaphore ezt általánosítja, hogy legfeljebb N egyidejű tartót engedjen.
A mutex egy lock, amely garantálja a kölcsönös kizárást (mutual exclusion) — egyszerre csak egy thread tarthatja és léphet be a védett critical sectionbe. A semaphore ezt általánosítja, hogy legfeljebb N egyidejű tartót engedjen.
acquire() dekrementál (0-nál blokkol), a release() inkrementál. Egy mutex lényegében egy N=1 semaphore, de ownership szemantikával.lock = threading.Lock()
def transfer(a, b, amt):
with lock: # critical section — egyszerre egy thread
a.balance -= amt
b.balance += amt
# Semaphore: az egyidejű DB kapcsolatok korlátozása 10-re
sem = threading.Semaphore(10)
def query():
with sem: # legfeljebb 10 thread futtatja ezt egyidejűleg
db.execute(...)
with/RAII/defer-t, hogy a release automatikus legyen kivételek esetén is.Ezek a mindennapi eszközök a megosztott állapot védelmére. A mutexek sorbarendezik a hozzáférést a race-ek megelőzésére; a semaphore-ok egy erőforrás-készletet fojtanak (kapcsolatok, permitek, rate limitek). A megfelelő primitív kiválasztása és a critical sectionök röviden tartása a különbség a helyes-és-gyors és a helyes-de-lassú között.
IT interjúkérdések gyűjteménye részletes válaszokkal — Juniortól Seniorig.
Adományozás