<mutex>
Включите стандартный заголовок <mutex>
для определения классов mutex
, recursive_mutex
timed_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 объект, который также передается в него без блокировки. |