Mutex yra užraktas, garantuojantis abipusę atskirtį (mutual exclusion) — tik viena gija gali jį laikyti ir vienu metu įeiti į apsaugotą kritinę sekciją. Semaforas apibendrina tai, leisdamas iki N konkurentinių laikytojų.
Mutex yra užraktas, garantuojantis abipusę atskirtį (mutual exclusion) — tik viena gija gali jį laikyti ir vienu metu įeiti į apsaugotą kritinę sekciją. Semaforas apibendrina tai, leisdamas iki N konkurentinių laikytojų.
acquire() sumažina (blokuojasi ties 0), release() padidina. Mutex iš esmės yra semaforas su N=1, bet su nuosavybės semantika.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, kad atrakinimas būtų automatinis net kilus išimtims.Tai yra kasdieniai įrankiai bendrai būsenai apsaugoti. Mutex'ai serializuoja prieigą, kad užkirstų kelią lenktynėms; semaforai riboja išteklių telkinį (jungtis, leidimus, greičio limitus). Tinkamo primityvo pasirinkimas ir kritinių sekcijų laikymas trumpų yra skirtumas tarp teisinga-ir-greita ir teisinga-bet-lėta.
IT pokalbių klausimų biblioteka su išsamiais atsakymais — nuo Junior iki Senior.
Paaukoti