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