std::timed_mutex::try_lock_until
template< class Clock, class Duration > bool try_lock_until( const std::chrono::time_point<Clock, Duration>& timeout_time ); | (начиная с C++11) |
Пытается заблокировать мьютекс. Блокирует выполнение до наступления указанного момента времени timeout_time (тайм-аут) или до получения блокировки (захвата мьютекса) — в зависимости от того, что произойдёт раньше. Если блокировка успешно получена, возвращает true, в противном случае возвращает false.
Если момент времени timeout_time уже прошёл, эта функция ведёт себя как try_lock().
Clock должны соответствовать требованиям Clock. Программа некорректна, если std::chrono::is_clock_v<Clock> является false.(начиная с C++20)
Стандарт рекомендует использовать часы, связанные с timeout_time; в этом случае могут учитываться корректировки часов. Таким образом, продолжительность блокировки может быть больше или меньше timeout_time - Clock::now() на момент вызова — в зависимости от направления корректировки и от того, учитывается ли она реализацией. Из-за задержек планирования процесса или конкуренции за ресурсы функция также может блокировать выполнение и после наступления момента времени timeout_time.
Как и try_lock(), эта функция может завершиться безуспешно без видимой причины и вернуть false, даже если до наступления момента времени timeout_time ни один другой поток не блокировал мьютекс.
Предшествующая операция unlock() над тем же мьютексом синхронизируется с (в соответствии с определением в std::memory_order) этой операцией, если она возвращает true.
Если поток вызывает try_lock_until, уже владея мьютексом, поведение не определено.
Параметры
| timeout_time | - | максимальный момент времени, до которого будет заблокировано выполнение |
Возвращаемое значение
true, если блокировка успешно получена, в противном случае false.
Исключения
Любое исключение, выброшенное timeout_time (часы, моменты времени и длительности, предоставляемые стандартной библиотекой, исключений не выбрасывают).
Пример
Отчёты об ошибках
Следующие отчёты об ошибках, изменяющие поведение, были ретроактивно применены к ранее опубликованным стандартам C++.
| DR | Применён к | Опубликованное поведение | Правильное поведение |
|---|---|---|---|
| LWG 2093 | C++11 |
try_lock_until не выбрасывал исключений | выбрасывает исключения, связанные с тайм-аутом |
См. также
| блокирует мьютекс; если мьютекс недоступен, блокирует выполнение (открытая функция-член) |
|
| пытается заблокировать мьютекс; возвращает управление, если мьютекс недоступен (открытая функция-член) |
|
| пытается заблокировать мьютекс; возвращает управление, если мьютекс был недоступен в течение указанного времени ожидания (открытая функция-член) |
|
| разблокирует мьютекс (открытая функция-член) |
|
Документация по C для mtx_timedlock |
|
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/thread/timed_mutex/try_lock_until