std::shared_lock<Mutex>::try_lock_for
template< class Rep, class Period > bool try_lock_for( const std::chrono::duration<Rep,Period>& timeout_duration ); | (начиная с C++14) |
Пытается заблокировать связанный мьютекс в режиме совместного доступа. Блокирует выполнение, пока не истечёт заданное timeout_duration или не будет получена блокировка — в зависимости от того, что произойдёт раньше. При успешном получении блокировки возвращает true, в противном случае возвращает false. По сути, вызывает mutex()->try_lock_shared_for(timeout_duration).
Эта функция может блокировать выполнение дольше, чем timeout_duration, из-за задержек планирования или конкуренции за ресурсы.
Стандарт рекомендует использовать монотонные часы для измерения длительности. Если реализация использует системные часы, время ожидания также может зависеть от корректировок часов.
Выбрасывается std::system_error, если связанный мьютекс отсутствует или уже заблокирован.
Поведение не определено, если Mutex не соответствует требованиям SharedTimedLockable.
Параметры
| timeout_duration | - | максимальная длительность блокировки |
Возвращаемое значение
true, если владение мьютексом было успешно получено, и false в противном случае.
Исключения
- Любые исключения, выбрасываемые
mutex()->try_lock_shared_for(timeout_duration). - Если связанный мьютекс отсутствует,
std::system_errorс кодом ошибкиstd::errc::operation_not_permitted. - Если мьютекс уже заблокирован,
std::system_errorс кодом ошибкиstd::errc::resource_deadlock_would_occur.
Пример
См. также
| пытается заблокировать связанный мьютекс TimedLockable (то есть получить над ним владение) и возвращает управление, если мьютекс был недоступен в течение заданного периода времени (открытая функция-член std::unique_lock<Mutex>) |
|
| блокирует связанный мьютекс (открытая функция-член) |
|
| пытается заблокировать связанный мьютекс (открытая функция-член) |
|
| пытается заблокировать связанный мьютекс до заданного момента времени (открытая функция-член) |
|
| разблокирует связанный мьютекс (открытая функция-член) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/thread/shared_lock/try_lock_for