Именованные требования C++: SharedTimedMutex (начиная с C++14)
Требования SharedTimedMutex расширяют требования TimedMutex, добавляя режим совместного владения блокировкой.
Требования
Кроме того, объект типа 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:
|
(C++14) | предоставляет механизм взаимного исключения с совместным владением и реализует блокировку с тайм-аутом (класс) |
См. также
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/named_req/SharedTimedMutex