М'ютекс

Матеріал з Вікіпедії — вільної енциклопедії.

Перейти до: навігація, пошук

М'ю́текс (англ. mutex, від англ. mutual exclusion — взаємне виключення) — одномісний семафор, що служить в програмуванні для синхронізації процесів і нитей, що виконуються одночасно.

М'ютекси (mutex) це один з варіантів семафорних механізмів для організації взаємного виключення. Вони реалізовані в багатьох ОС, їхнє основне призначення – організація взаємного виключення для нитей з одного і того ж або з різних процесів.

М'ютекси — це прості двійкові семафори, які можуть перебувати в одному з двох станів, — відміченому або невідміченому (відкритий і закритий відповідно). Коли якась нить, що належить будь-якому процесу, стає власником об'єкту mutex, останній переводиться в невідмічений стан. Якщо завдання звільняє м'ютекс, його стан стає відміченим.

Організація послідовного доступу до ресурсів з використанням м'ютексів стає нескладною, оскільки в кожен конкретний момент тільки одна нить може володіти цим об'єктом. Для того, щоб об'єкт mutex став доступний нитям, що належать різним процесам, при створенні йому необхідно присвоїти ім'я. Потім це ім'я потрібно передати «у спадок» завданням, які повинні його використовувати для взаємодії. Для цього вводяться спеціальні системні виклики (наприклад CreateMutex у Windows), в яких указується початкове значення м'ютекса і його ім'я. Для роботи з м'ютексом є кілька функцій. Крім вже згаданої функції створення такого об'єкту (CreateMutex), є функції відкриття (OpenMutex) і функція звільнення цього об'єкту (ReleaseMutex). Конкретні звернення до цих функцій і переліки передаваних і отримуваних параметрів потрібно дивитися в документації на відповідну ОС.

Єдине завдання м'ютекса — захист об'єкту від доступу до нього інших нитей, відмінних від тої, яка заволоділа м'ютексом. Якщо іншій ниті буде потрібний доступ до змінної, захищеної м'ютексом, то ця нить просто засинає доти, поки мьютекс не буде звільнений.

Мета використання м'ютексів — захист цілісності даних; проте ним породжуються інші проблеми, такі як взаємне блокування (клінч) і «змагання за ресурс».

[ред.] Дивись також

Особисті інструменти