Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Включите стандартный заголовок <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 объект, который также передается в него без блокировки. |