Мьютекс

Мьютекс

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

Мьютексы — это один из вариантов семафорных механизмов для организации взаимного исключения. Они реализованы во многих ОС, их основное назначение — организация взаимного исключения для потоков из одного и того же или из разных процессов.

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

Задача мьютекса — защита объекта от доступа к нему других потоков, отличных от того, который завладел мьютексом. В каждый конкретный момент только один поток может владеть объектом, защищённым мьютексом. Если другому потоку будет нужен доступ к переменной, защищённой мьютексом, то этот поток засыпает до тех пор, пока мьютекс не будет освобождён.

Цель использования мьютексов — защита данных от повреждения; однако им порождаются другие проблемы — такие, как взаимная блокировка (клинч) и состояние гонки.

Мьютекс отличается от спинлока наличием очереди ожидающих потоков.

Содержание

Мьютексы в Win32 API

Win32 API в Windows имеет две реализации мьютексов — собственно мьютексы[1], имеющие имена и доступные для использования между разными процессами, и критические секции[2], которые могут использоваться только в пределах одного процесса. Для каждого из этих двух типов мьютексов используются свои функции захвата и освобождения.

Критическая секция в Windows по возможности блокируется без использования вызова режима ядра (аналогично спинлоку), но при невозможности такой блокировки поток запрашивает ядро.

Мьютексы в Unix-подобных системах

Мьютекс в стандартной библиотеке Pthreads может использоваться в одном процессе или в разных, но в любом случае всем использующим процессам требуется доступ к памяти, в которой он размещён. Такой мьютекс может иметь один из следующих типов[3]:

  • PTHREAD_MUTEX_NORMAL — нет контроля повторного захвата тем же потоком (англ. thread)
  • PTHREAD_MUTEX_RECURSIVE — повторные захваты тем же потоком допустимы, ведётся счётчик таких захватов
  • PTHREAD_MUTEX_ERRORCHECK — повторные захваты тем же потоком вызывают немедленную ошибку

Примечания

  1. Create Mutex. Архивировано из первоисточника 14 февраля 2012.
  2. Critical sections. Архивировано из первоисточника 14 февраля 2012.
  3. pthread_mutexattr_settype(3). Архивировано из первоисточника 14 февраля 2012.

См. также


Wikimedia Foundation. 2010.

Игры ⚽ Поможем решить контрольную работу

Полезное


Смотреть что такое "Мьютекс" в других словарях:

  • Неблокирующая синхронизация — Неблокирующая синхронизация  подход в параллельном программировании на симметрично многопроцессорных системах, проповедующий отказ от традиционных примитив блокировки, таких, как семафоры, мьютексы и события. Разделение доступа между… …   Википедия

  • Многопоточность — Не следует путать с Поток данных. Не следует путать с Поток выполнения (для процессора). Многопоточность  свойство платформы (например, операционной системы, виртуальной машины и т. д.) или приложения, состоящее в том, что процесс …   Википедия

  • Монитор (синхронизация) — У этого термина существуют и другие значения, см. Монитор. Монитор  в языках программирования, высокоуровневый механизм взаимодействия и синхронизации процессов, обеспечивающий доступ к неразделяемым ресурсам.[1] Подход к синхронизации двух… …   Википедия

  • Взаимное исключение — Мьютекс (англ. mutex, от mutual exclusion  взаимное исключение)  одноместный семафор, служащий в программировании для синхронизации одновременно выполняющихся потоков. Мьютексы (mutex)  это один из вариантов семафорных механизмов для организации… …   Википедия

  • Мутекс — Мьютекс (англ. mutex, от mutual exclusion  взаимное исключение)  одноместный семафор, служащий в программировании для синхронизации одновременно выполняющихся потоков. Мьютексы (mutex)  это один из вариантов семафорных механизмов для организации… …   Википедия

  • Мьютэкс — Мьютекс (англ. mutex, от mutual exclusion  взаимное исключение)  одноместный семафор, служащий в программировании для синхронизации одновременно выполняющихся потоков. Мьютексы (mutex)  это один из вариантов семафорных механизмов для организации… …   Википедия

  • Мютекс — Мьютекс (англ. mutex, от mutual exclusion  взаимное исключение)  одноместный семафор, служащий в программировании для синхронизации одновременно выполняющихся потоков. Мьютексы (mutex)  это один из вариантов семафорных механизмов для организации… …   Википедия

  • Семафор (информатика) — У этого термина существуют и другие значения, см. Семафор. Семафор  объект, позволяющий войти в заданный участок кода не более чем n потокам. Определение введено Эдсгером Дейкстрой. Семафоры используются при передаче данных через разделяемую …   Википедия

  • Параллелизм (программа) — Не следует путать с термином «Поток данных». Многопоточность свойство платформы (например, операционной системы, JVM и т. д.) или приложения, состоящее в том, что процесс, порождённый в операционной системе, может состоять из нескольких потоков,… …   Википедия

  • Критическая секция — Не следует путать с Критическим участком. Эта статья или раздел нуждается в переработке. Пожалуйста, улучшите статью в соответствии с правилами …   Википедия


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»