Шаг 82 - Что такое взаимоисключение (Mutex)

Упоминания об этом объекте синхронизации ранее в шагах уже были. API: "Шаг 9 - Синхронизация файловых операций Mutex", где расказывалось о синхронизации доступа к файлам. И в шаге "Шаг 42 - Функция WinMain()" говорилось, что программа может определить запуск другого экземпляра. Но примера не было. Общая идея взаимоисключения похожа на критические секции. Только Mutex позволяет проводить синхронизацию не только между потоками(thread), но и процессами(process), то есть между приложениями.

82.gif (1688 b)

Данный объект синхронизации регистрирует доступ к ресурсам и может находиться в двух состояниях:

Mutex - установлен в тот момент когда ресурс свободен. Если к объекту есть доступ, то говорят, что сброшен. Для работы с Mutex есть ряд функций. Сначала объект нужно создать CreateMutex(), для доступа OpenMutex(), а для освобождения ресурса ReleaseMutex(). Для доступа к объекту Mutex используется ожидающая функция WaitForSingleObject(). Тонкость здесь следующая. Каждая программа создает объект Mutex по имени. То есть Mutex это именованный объект. А если такой объект синхронизации уже создала другая программа, то по вызову CreateMutex() мы получим указатель на объект, который уже создала первая программа. То есть у обоих программ будет один и тот же объект. Вот это и позволяет производить синхронизацию.


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем.