Mutex on lukko, joka takaa keskinäisen poissulkemisen (mutual exclusion) — vain yksi säie voi pitää sitä ja astua suojattuun kriittiseen osioon kerrallaan. Semafori yleistää tämän sallimaan enintään N samanaikaista pitäjää.
Mutex on lukko, joka takaa keskinäisen poissulkemisen (mutual exclusion) — vain yksi säie voi pitää sitä ja astua suojattuun kriittiseen osioon kerrallaan. Semafori yleistää tämän sallimaan enintään N samanaikaista pitäjää.
acquire() vähentää (estyy nollassa), release() lisää. Mutex on olennaisesti semafori, jossa N=1 mutta omistussemantiikalla.lock = threading.Lock()
def transfer(a, b, amt):
with lock: # kriittinen osio — yksi säie kerrallaan
a.balance -= amt
b.balance += amt
# Semafori: rajaa samanaikaiset DB-yhteydet 10:een
sem = threading.Semaphore(10)
def query():
with sem: # enintään 10 säiettä ajaa tätä samanaikaisesti
db.execute(...)
with/RAII/defer, jotta vapautus on automaattinen myös poikkeuksissa.Nämä ovat arkiset työkalut jaetun tilan suojaamiseen. Mutexit sarjallistavat pääsyn estääkseen kilpailutilanteet; semaforit kuristavat resurssialtaan (yhteydet, luvat, nopeusrajat). Oikean primitiivin valinta ja kriittisten osioiden pitäminen lyhyinä on ero oikean-ja-nopean ja oikean-mutta-hitaan välillä.
Kirjasto IT-haastattelukysymyksiä yksityiskohtaisine vastauksineen — Juniorista Senioriin.
Lahjoita