Een mutex is een lock die mutual exclusion garandeert — slechts één thread kan hem vasthouden en de beschermde critical section binnengaan. Een semaphore veralgemeent dit om tot N gelijktijdige houders toe te staan.
Een mutex is een lock die mutual exclusion garandeert — slechts één thread kan hem vasthouden en de beschermde critical section binnengaan. Een semaphore veralgemeent dit om tot N gelijktijdige houders toe te staan.
acquire() decrementeert (blokkeert bij 0), release() incrementeert. Een mutex is in wezen een semaphore met N=1 maar met ownership-semantiek.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 zodat vrijgeven automatisch gebeurt, zelfs bij excepties.Dit zijn de dagelijkse gereedschappen om gedeelde state te beschermen. Mutexes serialiseren toegang om races te voorkomen; semaphores knijpen een resource pool af (connecties, permits, rate limits). Het juiste primitief kiezen en critical sections kort houden is het verschil tussen correct-en-snel en correct-maar-traag.
Een bibliotheek met IT-sollicitatievragen met gedetailleerde antwoorden — van Junior tot Senior.
Doneren