Foundationপ্রথম নীতি থেকে
LEVEL 4 · Operating Systems

Mutex

মিউটেক্স

পারস্পরিক বর্জনের primitive — একসাথে কেবল একটা thread critical section-এ ঢুকতে পারে। Ownership আছে: যে lock করেছে কেবল সে-ই unlock করতে পারে।

also: mutual exclusion lock, lock

Ownership-ই semaphore-এর সাথে মূল পার্থক্য। একটা binary semaphore দেখতে mutex-এর মতো, কিন্তু যেকোনো thread সেটা release করতে পারে — mutex-এ পারে না।

এই ownership-এর কারণেই mutex-এ priority inheritance সম্ভব: kernel জানে কে lock ধরে আছে, তাই একটা উচ্চ-priority waiter থাকলে holder-এর priority সাময়িকভাবে বাড়িয়ে দেওয়া যায় (Mars Pathfinder-এর সমস্যার সমাধান এটাই ছিল)।

pthread_mutex_t m = PTHREAD_MUTEX_INITIALIZER;
pthread_mutex_lock(&m);
/* critical section */
pthread_mutex_unlock(&m);

ভেতরে কী: আধুনিক Linux-এ mutex একটা [[futex]]-এর উপর বানানো। Uncontended ক্ষেত্রে একটা atomic compare-and-swap — কোনো syscall নয়, ~২০ ns। কেবল contention হলে FUTEX_WAIT দিয়ে kernel-এ যায়।

strace -c দিয়ে যাচাই করা যায়: uncontended loop-এ শূন্যটা futex call।

সাধারণ ভুল: একই thread-এ দুইবার lock করা (deadlock, যদি না PTHREAD_MUTEX_RECURSIVE), lock ধরে রেখে exception ছোঁড়া (RAII/defer ব্যবহার করুন), আর lock-এর ক্রম অসামঞ্জস্য (ABBA deadlock)।