Një mutex është një lock që garanton mutual exclusion — vetëm një thread mund ta mbajë dhe të hyjë në critical section të mbrojtur në një kohë. Një semaphore e përgjithëson këtë për të lejuar deri në N mbajtës konkurrentë.
Një mutex është një lock që garanton mutual exclusion — vetëm një thread mund ta mbajë dhe të hyjë në critical section të mbrojtur në një kohë. Një semaphore e përgjithëson këtë për të lejuar deri në N mbajtës konkurrentë.
acquire() zvogëlon (bllokon në 0), release() rrit. Një mutex është në thelb një semaphore me N=1 por me semantikë zotërimi.lock = threading.Lock()
def transfer(a, b, amt):
with lock: # critical section — një thread në një kohë
a.balance -= amt
b.balance += amt
# Semaphore: kufizo lidhjet konkurrente DB në 10
sem = threading.Semaphore(10)
def query():
with sem: # deri në 10 thread-e e ekzekutojnë këtë konkurrentisht
db.execute(...)
with/RAII/defer që lirimi të jetë automatik edhe në përjashtime.Këto janë mjetet e përditshme për të mbrojtur gjendjen e ndarë. Mutexes serializojnë aksesin për të parandaluar race-et; semaphores mbytin një resource pool (lidhje, permits, rate limits). Zgjedhja e primitivit të duhur dhe mbajtja e critical sections të shkurtra është dallimi mes korrekt-dhe-i-shpejtë dhe korrekt-por-i-ngadaltë.
Një bibliotekë pyetjesh intervistash IT me përgjigje të detajuara — nga Junior te Senior.
Dhuro