std::shared_timed_mutex::try_lock_until
template< class Clock, class Duration > bool try_lock_until( const std::chrono::time_point<Clock, Duration>& timeout_time ); | (начиная с C++14) |
Пытается заблокировать мьютекс. Блокирует выполнение до наступления указанного timeout_time (истечения времени ожидания) или получения блокировки (владения мьютексом) — в зависимости от того, что произойдёт раньше. При успешном получении блокировки возвращает true, в противном случае возвращает false.
Если timeout_time уже наступил, эта функция ведёт себя как try_lock().
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 для mtx_timedlock |
|
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/thread/shared_timed_mutex/try_lock_until