Читаем Параллельное программирование на С++ в действии полностью

Класс 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 const& relative_time);

 template

 bool try_lock_until(

  std::chrono::time_point const& absolute_time);

};

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.

Исключения

Нет.

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных