Muteks je zaklep, ki zagotavlja medsebojno izključevanje — le ena nit ga lahko drži in naenkrat vstopi v zaščiteni kritični odsek. Semafor to posploši tako, da dovoli do N sočasnih imetnikov.
Muteks je zaklep, ki zagotavlja medsebojno izključevanje — le ena nit ga lahko drži in naenkrat vstopi v zaščiteni kritični odsek. Semafor to posploši tako, da dovoli do N sočasnih imetnikov.
acquire() zmanjša (blokira pri 0), release() poveča. Muteks je v bistvu semafor z N=1, a s semantiko lastništva.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, da je sprostitev samodejna tudi ob izjemah.To so vsakodnevna orodja za zaščito deljenega stanja. Muteksi serializirajo dostop, da preprečijo tekmovalne razmere; semaforji uravnavajo bazen virov (povezave, dovoljenja, omejitve hitrosti). Izbira pravega gradnika in ohranjanje kratkih kritičnih odsekov je razlika med pravilno-in-hitro ter pravilno-a-počasno.
Knjižnica IT vprašanj za razgovore s podrobnimi odgovori — od začetnika do izkušenega.
Doniraj