C++ named requirements: SharedTimedMutex (since C++14)
From cppreference.net
C++
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 требованиям:
|
(C++14)
|
предоставляет механизм совместной взаимной блокировки и реализует блокировку с таймаутом
(класс) |