Mutex je zaključavanje koje jamči međusobno isključivanje — samo jedna nit može ga držati i ući u zaštićenu kritičnu sekciju u datom trenutku. Semafor to generalizira dopuštajući do N istovremenih držatelja.
Mutex je zaključavanje koje jamči međusobno isključivanje — samo jedna nit može ga držati i ući u zaštićenu kritičnu sekciju u datom trenutku. Semafor to generalizira dopuštajući do N istovremenih držatelja.
acquire() smanjuje (blokira na 0), release() povećava. Mutex je u biti semafor s N=1, ali s vlasničkom semantikom.lock = threading.Lock()
def transfer(a, b, amt):
with lock: # kritična sekcija — jedna nit odjednom
a.balance -= amt
b.balance += amt
# Semafor: ograniči istovremene DB veze na 10
sem = threading.Semaphore(10)
def query():
with sem: # do 10 niti pokreće ovo istovremeno
db.execute(...)
with/RAII/defer da otpuštanje bude automatsko čak i pri iznimkama.Ovo su svakodnevni alati za zaštitu dijeljenog stanja. Mutexi serijaliziraju pristup da spriječe raceove; semafori prigušuju bazen resursa (veze, dozvole, ograničenja brzine). Odabir pravog primitiva i držanje kritičnih sekcija kratkima razlika je između ispravno-i-brzo i ispravno-ali-sporo.
Knjižnica IT pitanja za razgovore za posao s detaljnim odgovorima — od Juniora do Seniora.
Doniraj