Spec-Zone.ru › C++

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 не выбрасывал исключений выбрасывает исключения, связанные с тайм-аутом

См. также

lock
блокирует мьютекс; если мьютекс недоступен, блокирует выполнение
(открытая функция-член)
try_lock
пытается заблокировать мьютекс; возвращает управление, если мьютекс недоступен
(открытая функция-член)
try_lock_for
пытается заблокировать мьютекс; возвращает управление, если мьютекс
был недоступен в течение указанного времени ожидания
(открытая функция-член)
unlock
разблокирует мьютекс
(открытая функция-член)
Документация по 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API