Приклад взаємного виключення (мутекс) коли багатопотокові програми не виконують код таким лінійним способом. У багатопотоковій програмі м'ютекс гарантує, що потоки виконують свої операції, як два потоки, показані на малюнку 1, при цьому кожен потік отримує доступ до критичної частини коду по одному.
Використання м'ютексу може призвести до голоду. наприклад: потік після отримання блокування потрапляє в критичну секцію, але якщо цей потік отримує випередження або переходить у сплячий стан, тоді інший процес не може увійти в критичну секцію, оскільки інший процес чекатиме, поки блокування буде знято.
Популярний реальний приклад mutex включає туалети. Коли людина заходить в туалетну перегородку, вона замикає двері зсередини. Туалет схожий на об’єкт, до якого можуть отримати доступ кілька потоків. Замок на дверях перегородки схожий на м’ютекс, а ряд людей зовні представляє нитки.
Наприклад, якщо кілька потоків спільно використовують доступ до бази даних, потоки можуть використовувати об’єкт м’ютексу, щоб дозволити лише одному потоку за раз записувати до бази даних. У наступному прикладі використовується функція CreateMutex для створення об’єкта м’ютексу та функція CreateThread для створення робочих потоків.
Семафор — це змінна, яка використовується для керування доступом до спільного ресурсу в операційній системі, а м’ютекс — це просто блокування, отримане перед входом у критичний розділ і його звільненням. Семафор кращий для кількох екземплярів ресурсу, але м’ютекс кращий для одного спільного ресурсу.
Периферійний пристрій MUTEX використовує взаємне виключення для підтримки блокування ресурсу, який спільно використовується між різними процесорами в системі. Спільний ресурс може використовуватися лише одним із цих ядер протягом періоду, протягом якого він заблокований. Периферійний пристрій MUTEX містить кілька регістрів м'ютексу.