Требования к именованным типам C++: TimedMutex (с C++11)
Требования к TimedMutex расширяют требования к TimedLockable и включают межпоточную синхронизацию.
Требования
Кроме того, для объекта m типа TimedMutex:
- Выражение
m.try_lock_for(duration)обладает следующими свойствами - Ведёт себя как атомарная операция.
- Пытается получить эксклюзивное владение мьютексом в течение времени, заданного
duration. Еслиdurationменьше или равноduration.zero(), пытается получить владение без блокировки (как если бы с помощьюtry_lock()). В противном случае, эта функция блокируется до получения мьютекса или истечения времени, указанного вduration. Она возвращает значение вdurationтолько в случае успеха, но ей разрешается не получить мьютекс, даже если в какой-то момент во времяdurationон не был захвачен другой нитью. В любом случае, она возвращаетtrueесли мьютекс был получен иfalseв противном случае. - Если
try_lock_for(duration)успешно, предыдущиеunlock()операции над тем же объектом синхронизированы с этой операцией (эквивалентно release-acquirestd::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-acquirestd::memory_order). - Поведение не определено, если вызывающая нить уже владеет мьютексом (за исключением случая, если m —
std::recursive_timed_mutex). - Исключение может быть выброшено объектами clock, time_point или duration во время выполнения (часы, временные точки и продолжительности, предоставляемые стандартной библиотекой, никогда не выбрасывают исключения).
Типы библиотек
Следующие типы стандартной библиотеки удовлетворяют требованиям к TimedMutex:
Отчёты об ошибках
Следующие исправляющие ошибки отчёты были применены ретроактивно к ранее опубликованным стандартам C++.
| DR | Применено к | Поведение, как опубликовано | Корректное поведение |
|---|---|---|---|
| LWG 2093 | C++11 | Исключения, связанные с таймаутом, отсутствовали в спецификации | Указано |
См. также
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/named_req/TimedMutex