Класс std::recursive_timed_mutex
предоставляет поддержку блокировок с таймаутами сверх базовых средств взаимного исключения и синхронизации, предоставляемых классом std::recursive_mutex
. Перед тем как обращаться к данным, защищаемым мьютексом, этот мьютекс необходимо lock()
, try_lock()
, try_lock_for()
или try_lock_until()
. Если мьютекс уже захвачен другим потоком, то функция try_lock()
вернет ошибку, функция lock()
приостановит выполнение потока до получения мьютекса, а функции try_lock_for()
и try_lock_until()
приостановят выполнение потока до получения мьютекса или истечения таймаута. Закончив операции над разделяемыми данными, поток должен вызвать функцию unlock()
(вне зависимости от того, какой функцией мьютекс был захвачен), чтобы освободить мьютекс и дать другим потокам возможность захватить его.
Этот мьютекс называется std::recursive_timed_mutex
, может снова захватить его любой функцией захвата. Никакой другой поток не сможет захватить этот мьютекс, пока владеющий им поток не вызовет функцию unlock
столько раз, сколько было успешных вызовов функций захвата.
Экземпляр std::recursive_timed_mutex
удовлетворяет требованиям концепции TimedLockable
.
class recursive_timed_mutex {
public:
recursive_timed_mutex(recursive_timed_mutex const&)=delete;
recursive_timed_mutex& operator=(
recursive_timed_mutex const&)=delete;
recursive_timed_mutex();
~recursive_timed_mutex();
void lock();
void unlock();
bool try_lock() noexcept;
template
bool try_lock_for(
std::chrono::duration
template
bool try_lock_until(
std::chrono::time_point
};
STD::RECURSIVE_TIMED_MUTEX
, КОНСТРУКТОР ПО УМОЛЧАНИЮ
Конструирует объект std::recursive_timed_mutex
.
recursive_timed_mutex();
Конструирует экземпляр std::recursive_timed_mutex
.
Вновь сконструированный объект std::recursive_timed_mutex
первоначально не захвачен.
Исключение типа std::system_error
, если не удалось создать экземпляр std::recursive_timed_mutex
.
STD::RECURSIVE_TIMED_MUTEX
, ДЕСТРУКТОР
Уничтожает объект std::recursive_timed_mutex
.
~recursive_timed_mutex();
Объект *this
не должен быть захвачен.
Уничтожает *this
.
Нет.
STD::RECURSIVE_TIMED_MUTEX::LOCK
, ФУНКЦИЯ-ЧЛЕН
Захватывает объект std::recursive_timed_mutex
для текущего потока.
void lock();
Блокирует текущий поток, пока мьютекс *this
не будет захвачен.
*this
захвачен текущим потоком. Если вызывающий поток уже удерживал *this
, то счетчик захватов увеличивается на единицу.
Исключение типа std::system_error
в случае ошибки.
STD::RECURSIVE_TIMED_MUTEX::TRY_LOCK
, ФУНКЦИЯ-ЧЛЕН
Пытается захватить объект std::recursive_timed_mutex
для текущего потока.
bool try_lock() noexcept;
Пытается захватить объект std::recursive_timed_mutex
для текущего потока без блокирования.
true
, если вызывающий поток захватил мьютекс, иначе false
.
*this
захвачен вызывающим потоком, если функция вернула true
.
Нет.