std::recursive_timed_mutex:: try_lock_until
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Member functions | ||||
| Locking | ||||
|
recursive_timed_mutex::try_lock_until
|
||||
| Native handle | ||||
|
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
на рекурсивном мьютексе многократно. Успешные вызовы
try_lock_until
увеличивают счетчик владения: мьютекс будет освобожден только после того, как поток выполнит соответствующее количество вызовов
unlock
.
Максимальное количество уровней владения не определено. Вызов
try_lock_until
вернет
false
если это число превышено.
Содержание |
Параметры
| timeout_time | - | максимальная точка времени до которой будет блокировка |
Возвращаемое значение
true если блокировка была успешно получена, в противном случае false .
Исключения
Любое исключение, выброшенное timeout_time (часы, точки времени и длительности, предоставляемые стандартной библиотекой, никогда не выбрасывают исключения).
Пример
|
Этот раздел не завершён
Причина: отсутствует пример |
Отчёты о дефектах
Следующие отчеты об изменениях поведения, влияющие на дефекты, были применены ретроактивно к ранее опубликованным стандартам C++.
| DR | Applied to | Behavior as published | Correct behavior |
|---|---|---|---|
| LWG 2093 | C++11 |
try_lock_until
не выбрасывал исключений
|
выбрасывает исключения, связанные с таймаутом |
Смотрите также
|
блокирует мьютекс, ожидает если мьютекс недоступен
(public member function) |
|
|
пытается заблокировать мьютекс, возвращает управление если мьютекс недоступен
(public member function) |
|
|
пытается заблокировать мьютекс, возвращает управление если мьютекс был
недоступен в течение указанного времени ожидания (public member function) |
|
|
разблокирует мьютекс
(public member function) |
|
|
C documentation
для
mtx_timedlock
|
|