Namespaces
Variants

C++ named requirements: SharedTimedMutex (since C++14)

From cppreference.net
C++ named requirements

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

Требования

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

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

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

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

предоставляет механизм совместной взаимной блокировки и реализует блокировку с таймаутом
(класс)

Смотрите также