Namespaces
Variants

std::recursive_timed_mutex:: try_lock_until

From cppreference.net

Concurrency support library
Threads
(C++11)
(C++20)
this_thread namespace
(C++11)
(C++11)
Cooperative cancellation
Mutual exclusion
Generic lock management
Condition variables
(C++11)
Semaphores
Latches and Barriers
(C++20)
(C++20)
Futures
(C++11)
(C++11)
(C++11)
Safe reclamation
Hazard pointers
Atomic types
(C++11)
(C++20)
Initialization of atomic types
(C++11) (deprecated in C++20)
(C++11) (deprecated in C++20)
Memory ordering
(C++11) (deprecated in C++26)
Free functions for atomic operations
Free functions for atomic flags
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