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