Spec-Zone.ru › C++

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

Требования SharedTimedMutex расширяют требования TimedMutex, добавляя режим совместного владения блокировкой.

Требования

  • TimedMutex
  • SharedMutex

Кроме того, объект типа SharedTimedMutex m поддерживает операции совместного владения блокировкой с тайм-аутом:

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

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

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

shared_timed_mutex
(C++14)
предоставляет механизм взаимного исключения с совместным владением и реализует блокировку с тайм-аутом
(класс)

См. также

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

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

Spec-Zone.ru

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