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() операции над тем же объектом синхронизированы с этой операцией (эквивалентно release-acquire std::memory_order).
    • Поведение не определено, если вызывающая нить уже владеет мьютексом (за исключением случая, если m — std::recursive_timed_mutex).
    • Исключение может быть выброшено объектами 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() операции над тем же объектом синхронизированы с этой операцией (эквивалентно release-acquire std::memory_order).
    • Поведение не определено, если вызывающая нить уже владеет мьютексом (за исключением случая, если m — std::recursive_timed_mutex).
    • Исключение может быть выброшено объектами clock, time_point или duration во время выполнения (часы, временные точки и продолжительности, предоставляемые стандартной библиотекой, никогда не выбрасывают исключения).

Типы библиотек

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

  • std::timed_mutex
  • std::recursive_timed_mutex
  • std::shared_timed_mutex

Отчёты об ошибках

Следующие исправляющие ошибки отчёты были применены ретроактивно к ранее опубликованным стандартам 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/w/cpp/named_req/TimedMutex

Spec-Zone.ru

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