Spec-Zone.ru › C++

Именованные требования C++: TimedMutex (начиная с C++11)

Требования TimedMutex расширяют требования TimedLockable, добавляя синхронизацию между потоками.

Требования

  • TimedLockable
  • Mutex

Кроме того, для объекта m типа TimedMutex:

  • Выражение m.try_lock_for(duration) обладает следующими свойствами
    • Ведёт себя как атомарная операция.
    • Пытается получить исключительное владение мьютексом в течение времени, заданного duration. Если duration меньше или равно duration.zero(), предпринимается попытка получить владение без блокировки (как при try_lock()). В противном случае эта функция блокируется до тех пор, пока мьютекс не будет захвачен или не истечёт время, заданное duration. Функция возвращает управление до duration только в случае успеха, однако ей разрешается не захватить мьютекс, даже если в какой-либо момент в течение duration он не принадлежал другому потоку. В любом случае функция возвращает true, если мьютекс был захвачен, и false в противном случае.
    • Если try_lock_for(duration) завершается успешно, предшествующие операции unlock() над тем же объектом синхронизируются-с этой операцией (эквивалентно std::memory_order release-acquire).
    • Поведение не определено, если вызывающий поток уже владеет мьютексом (за исключением случая, когда m — std::recursive_timed_mutex).
    • Во время выполнения clock, time point или duration могут выбросить исключение (clock, time point и duration, предоставляемые стандартной библиотекой, никогда не выбрасывают исключений).
  • Выражение m.try_lock_until(time_point) обладает следующими свойствами
    • Ведёт себя как атомарная операция.
    • Пытается получить исключительное владение мьютексом в течение оставшегося времени до time_point. Если time_point уже наступил, предпринимается попытка получить владение без блокировки (как при try_lock()). В противном случае эта функция блокируется до тех пор, пока мьютекс не будет захвачен или не истечёт время, заданное time_point. Функция возвращает управление до time_point только в случае успеха, однако ей разрешается не захватить мьютекс, даже если в какой-либо момент до time_point он не принадлежал другому потоку. В любом случае функция возвращает true, если мьютекс был захвачен, и false в противном случае.
    • Если try_lock_until(time_point) завершается успешно, предшествующие операции unlock() над тем же объектом синхронизируются-с этой операцией (эквивалентно std::memory_order release-acquire).
    • Поведение не определено, если вызывающий поток уже владеет мьютексом (за исключением случая, когда m — std::recursive_timed_mutex).
    • Во время выполнения clock, time point или duration могут выбросить исключение (clock, time point и duration, предоставляемые стандартной библиотекой, никогда не выбрасывают исключений).

Стандартная библиотека

Следующие типы стандартной библиотеки соответствуют требованиям TimedMutex:

recursive_timed_mutex
(C++11)
предоставляет средство взаимного исключения, которое может рекурсивно блокироваться
одним и тем же потоком и реализует блокировку с тайм-аутом
(класс)
shared_timed_mutex
(C++14)
предоставляет средство совместного взаимного исключения и реализует блокировку с тайм-аутом
(класс)
timed_mutex
(C++11)
предоставляет средство взаимного исключения, реализующее блокировку с тайм-аутом
(класс)

Отчёты об исправлениях дефектов

Следующие отчёты об исправлениях дефектов, изменяющие поведение, были ретроактивно применены к ранее опубликованным стандартам C++.

DR Применяется к Поведение согласно опубликованной спецификации Правильное поведение
LWG 2093 C++11 исключения, связанные с тайм-аутом, отсутствовали в спецификации указаны

См. также

  • Библиотека поддержки потоков
  • TimedLockable
  • Mutex

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/named_req/TimedMutex

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API