ஒரு mutex என்பது mutual exclusion-ஐ உறுதி செய்யும் ஒரு lock — ஒரு நேரத்தில் ஒரே ஒரு thread மட்டுமே அதை வைத்திருந்து பாதுகாக்கப்பட்ட critical section-க்குள் நுழைய முடியும். ஒரு semaphore இதை N concurrent holders வரை அனுமதிக்க பொதுமைப்படுத்துகிறது.
ஒரு mutex என்பது mutual exclusion-ஐ உறுதி செய்யும் ஒரு lock — ஒரு நேரத்தில் ஒரே ஒரு thread மட்டுமே அதை வைத்திருந்து பாதுகாக்கப்பட்ட critical section-க்குள் நுழைய முடியும். ஒரு semaphore இதை N concurrent holders வரை அனுமதிக்க பொதுமைப்படுத்துகிறது.
acquire() குறைக்கிறது (0-இல் block ஆகிறது), release() அதிகரிக்கிறது. ஒரு mutex என்பது அடிப்படையில் N=1 உடன் ஆனால் ownership semantics உடன் கூடிய ஒரு semaphore ஆகும்.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-ஐப் பயன்படுத்துங்கள்.இவை shared state-ஐப் பாதுகாக்கும் அன்றாட கருவிகள். Mutexes ஆனது races-ஐத் தடுக்க access-ஐ serialize செய்கின்றன; semaphores ஒரு resource pool-ஐ (connections, permits, rate limits) கட்டுப்படுத்துகின்றன. சரியான primitive-ஐத் தேர்ந்தெடுத்து critical sections-ஐ சிறியதாக வைத்திருப்பது correct-and-fast-க்கும் correct-but-slow-க்கும் இடையிலான வித்தியாசம்.
விரிவான பதில்களுடன் கூடிய IT நேர்காணல் கேள்விகளின் நூலகம் — Junior முதல் Senior வரை.
நன்கொடை