ایک mutex ایک lock ہے جو mutual exclusion کی ضمانت دیتا ہے — ایک وقت میں صرف ایک thread اسے پکڑ سکتی ہے اور محفوظ critical section میں داخل ہو سکتی ہے۔ ایک semaphore اسے N بیک وقت holders کی اجازت دینے تک عام کر دیتا ہے۔
ایک mutex ایک lock ہے جو mutual exclusion کی ضمانت دیتا ہے — ایک وقت میں صرف ایک thread اسے پکڑ سکتی ہے اور محفوظ critical section میں داخل ہو سکتی ہے۔ ایک semaphore اسے N بیک وقت holders کی اجازت دینے تک عام کر دیتا ہے۔
acquire() گھٹاتا ہے (0 پر block)، release() بڑھاتا ہے۔ ایک mutex بنیادی طور پر N=1 والا semaphore ہے لیکن ownership semantics کے ساتھ۔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 استعمال کریں تاکہ exceptions پر بھی release خودکار ہو۔یہ shared state کی حفاظت کے روزمرہ اوزار ہیں۔ Mutexes races روکنے کے لیے رسائی کو serialize کرتی ہیں؛ semaphores ایک resource pool (connections، permits، rate limits) کو throttle کرتی ہیں۔ درست primitive منتخب کرنا اور critical sections کو مختصر رکھنا correct-and-fast اور correct-but-slow کے درمیان کا فرق ہے۔
تفصیلی جوابات کے ساتھ IT انٹرویو سوالات کی ایک لائبریری — جونیئر سے سینئر تک۔
عطیہ دیں