<mutex>

Включите стандартный заголовок <mutex> для определения классов mutex, recursive_mutextimed_mutexи ; шаблонов lock_guard иunique_lock; вспомогательных типов и recursive_timed_mutexфункций, определяющих регионы кода взаимного исключения.

Предупреждение

Начиная с Visual Studio 2015, типы синхронизации стандартной библиотеки C++ основаны на примитивах синхронизации Windows и больше не используют ConcRT (за исключением случаев, когда целевая платформа — Windows XP). Типы, определенные в ней <mutex> , не должны использоваться с типами или функциями ConcRT.

Требования

Заголовок.<mutex>

Пространство именstd:

Замечания

Примечание.

В коде, скомпилированном с помощью /clr, этот заголовок блокируется.

Классы mutex и recursive_mutex имеют тип мьютекса. Тип мьютекса имеет конструктор по умолчанию и деструктор, который не создает исключения. Эти объекты содержат методы, обеспечивающие взаимное исключение в случаях, когда несколько потоков пытаются заблокировать один объект. В частности, тип мьютекса содержит методы lock, try_lock и unlock:

  • Метод lock блокирует вызывающий поток до тех пор, пока этот поток не получит права владения мьютексом. Его возвращаемое значение игнорируется.

  • Метод try_lock пытается получить права владения мьютексом без блокировки. Его возвращаемое значение можно преобразовать в bool и оно является true, если метод получает права владения; в противном случае — false.

  • Метод unlock выпускает права владения мьютексом из вызывающего потока.

Вы можете использовать типы мьютекса в качестве аргументов для создания экземпляров шаблонов lock_guard и unique_lock. Объекты этих типов можно использовать в качестве Lock аргумента для функций-членов ожидания в шаблоне condition_variable_any.

Тип мьютекса с ограничением по времени удовлетворяет требованиям к типу мьютексов. Кроме того, он содержит методы try_lock_for и try_lock_until, которые должны вызываться с помощью одного аргумента и должны возвращать тип, доступный для преобразования в bool. Тип мьютекса с ограничением по времени может определять эти функции с помощью дополнительных аргументов, если эти дополнительные аргументы имеют значения по умолчанию.

  • Метод try_lock_for должен вызываться с помощью одного аргумента, Rel_timeтип которого является экземпляром chrono::duration. Метод пытается получить права владения мьютексом, но возвращается в период времени, назначенный Rel_time, независимо от успешности выполнения операции. Возвращенное значение преобразуется в true, если метод получает права владения; в противном случае возвращаемое значение преобразуется в false.

  • Метод try_lock_until должен вызываться с помощью одного аргумента, Abs_timeтип которого является экземпляром chrono::time_point. Метод пытается получить права владения мьютексом, но возвращается раньше окончания периода, назначенного Abs_time, независимо от успешности выполнения операции. Возвращенное значение преобразуется в true, если метод получает права владения; в противном случае возвращаемое значение преобразуется в false.

Тип мьютекса также известен как блокируемый тип. Если он не предоставляет функцию-член try_lock, это базовый тип блокировки. Тип таймера мьютекса называется блокируемым типом по времени. Блоки заблокированного типа по времени или до тех пор, пока не будет получена блокировка мьютекса.

Участники

Классы

Имя Описание
lock_guard Класса Представляет шаблон, который можно создать для создания объекта, деструктор которого разблокирует мьютекс.
mutex Класс (стандартная библиотека C++) Представляет тип мьютекса. Используйте объекты этого типа для принудительного взаимного исключения в программе.
recursive_mutex Класса Представляет тип мьютекса. В отличие от mutex класса, поведение вызовов методов блокировки для объектов, которые уже заблокированы, хорошо определены.
recursive_timed_mutex Класса Используйте объекты этого типа для принудительного взаимного исключения с ограниченной по времени блокировкой в программе. В отличие timed_mutexот того, что эффект вызова методов блокировки для recursive_timed_mutex объектов хорошо определен.
scoped_lock Класса
timed_mutex Класса Используйте объекты этого типа для принудительного взаимного исключения с ограниченной по времени блокировкой в программе.
unique_lock Класса Представляет шаблон, который можно создать для создания объектов, которые управляют блокировкой и разблокировкой мьютекса.

Функции

Имя Описание
call_once Предоставляет механизм для однократного вызова указанного объекта во время выполнения.
lock Пытается заблокировать все аргументы без взаимоблокировки.
swap Пытается обменять внутренние состояния двух mutex объектов x и y.
try_lock Пытается заблокировать блокируемый объект. Возвращается немедленно.

Структуры

Имя Описание
adopt_lock_t Структура Представляет тип, который используется для определения adopt_lock.
defer_lock_t Структура Представляет тип, который определяет объект defer_lock, используемый для выбора одного из перегруженных конструкторов unique_lock.
once_flag Структура Представляет объект struct, который используется с функцией шаблона call_once для обеспечения однократного вызова кода инициализации даже при наличии нескольких потоков выполнения.
try_to_lock_t Структура Представляет объект struct, который определяет объект try_to_lock и используется для выбора одного из перегруженных конструкторов unique_lock.

Переменные

Имя Описание
adopt_lock Представляет объект, который можно передать конструкторам lock_guard и unique_lock указать, что mutex объект, который также передается конструктору, заблокирован.
defer_lock Представляет объект, который можно передать unique_lockконструктору, чтобы указать, что конструктор не должен блокировать mutex объект, который также передается в него.
try_to_lock Представляет объект, который можно передать конструктору, чтобы unique_lock указать, что конструктор должен попытаться разблокировать mutex объект, который также передается в него без блокировки.

См. также

Справочник по файлам заголовков