একটি mutex হলো একটি lock যা mutual exclusion নিশ্চিত করে — একবারে কেবল একটি thread এটি ধরে রাখতে এবং সুরক্ষিত critical section-এ প্রবেশ করতে পারে। একটি semaphore এটিকে সাধারণীকরণ করে N জন concurrent holder-কে অনুমতি দিতে।
একটি mutex হলো একটি lock যা mutual exclusion নিশ্চিত করে — একবারে কেবল একটি thread এটি ধরে রাখতে এবং সুরক্ষিত critical section-এ প্রবেশ করতে পারে। একটি semaphore এটিকে সাধারণীকরণ করে N জন concurrent holder-কে অনুমতি দিতে।
acquire() decrement করে (0-তে block করে), release() increment করে। একটি 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 ব্যবহার করুন যাতে exception হলেও release স্বয়ংক্রিয় হয়।এগুলো shared state রক্ষার প্রতিদিনের টুল। Mutex race প্রতিরোধ করতে access serialize করে; semaphore একটি resource pool (connection, permit, rate limit) throttle করে। সঠিক primitive বেছে নেওয়া এবং critical section ছোট রাখা হলো correct-and-fast এবং correct-but-slow-এর মধ্যে পার্থক্য।
বিস্তারিত উত্তরসহ IT ইন্টারভিউ প্রশ্নের একটি লাইব্রেরি — জুনিয়র থেকে সিনিয়র পর্যন্ত।
দান করুন