Параллельное программирование на С++ в действии. Практика разработки многопоточных программ - [205]

Шрифт
Интервал

, который ссылается на указанный мьютекс. Вызывает >m.try_lock().

Исключения

Нет.

Постусловия

>this->owns_lock() возвращает результат вызова >m.try_lock(), >this->mutex() == &m.

>STD::UNIQUE_LOCK, КОНСТРУКТОР ПРОБНОЙ БЛОКИРОВКИ С ОТНОСИТЕЛЬНЫМ ТАЙМАУТОМ

Конструирует экземпляр >std::unique_lock, ассоциированный с указанным мьютексом, и пытается захватить этот мьютекс.

Объявление

>template

>unique_lock(

> mutex_type& m,

> std::chrono::duration const& relative_time);

Предусловия

Тип >Mutex, которым конкретизирован шаблон >std::unique_lock, должен удовлетворять требованиям концепции >TimedLockable.

Результат

Конструирует экземпляр >std::unique_lock, который ссылается на указанный мьютекс. Вызывает >m.try_lock_for(relative_time).

Исключения

Нет.

Постусловия

>this->owns_lock() возвращает результат вызова >m.try_lock_for(), >this->mutex() == &m.

>STD::UNIQUE_LOCK, КОНСТРУКТОР ПРОБНОЙ БЛОКИРОВКИ С АБСОЛЮТНЫМ ТАЙМАУТОМ

Конструирует экземпляр >std::unique_lock, ассоциированный с указанным мьютексом, и пытается захватить этот мьютекс.

Объявление

>template

>unique_lock(

> mutex_type& m,

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

Предусловия

Тип >Mutex, которым конкретизирован шаблон >std::unique_lock, должен удовлетворять требованиям концепции >TimedLockable.

Результат

Конструирует экземпляр >std::unique_lock, который ссылается на указанный мьютекс. Вызывает >m.try_lock_until(relative_time).

Исключения

Нет.

Постусловия

>this->owns_lock() возвращает результат вызова >m.try_lock_until(), >this->mutex() == &m.

>STD::UNIQUE_LOCK, ПЕРЕМЕЩАЮЩИЙ КОНСТРУКТОР

Передает владение блокировкой от существующего объекта >std::unique_lock вновь сконструированному.

Объявление

>unique_lock(unique_lock&& other) noexcept;

Результат

Конструирует экземпляр >std::unique_lock. Если объект >other владел блокировкой мьютекса до вызова конструктора, то теперь этой блокировкой владеет вновь сконструированный объект >std::unique_lock.

Постусловия

Для вновь сконструированного объекта >std::unique_lock x, >x.mutex() равно значению >other.mutex() до вызова конструктора, а >x.owns_lock() равно значению >other.owns_lock() до вызова конструктора. >other.mutex() == NULL, >other.owns_lock() == false.

Исключения

Нет.

Примечание. Объекты >std::unique_lock не удовлетворяют требованиям концепции >CopyConstructible, поэтому копирующего конструктора не существует, существует только этот перемещающий конструктор.

>STD::UNIQUE_LOCK, ПЕРЕМЕЩАЮЩИЙ ОПЕРАТОР ПРИСВАИВАНИЯ

Передает владение блокировкой от одного объекта >std: :unique_ lock другому.

Объявление

>unique_lock& operator=(unique_lock&& other) noexcept;

Результат

Если >this->owns_lock() возвращала >true до вызова этого оператора, то вызывает >this->unlock(). Если объект >other владел блокировкой мьютекса до присваивания, то теперь этой блокировкой владеет >*this.

Постусловия

>this.mutex() равно значению >other.mutex() до присваивания, а >this.owns_lock() равно значению >other.owns_lock() до присваивания. >other.mutex() == NULL, >other.owns_lock() == false.

Исключения

Нет.

Примечание. Объекты >std::unique_lock не удовлетворяют требованиям концепции >CopyAssignable, поэтому копирующего оператора присваивания не существует, существует только этот перемещающий оператор присваивания.

>STD::UNIQUE_LOCK, ДЕСТРУКТОР

Уничтожает экземпляр >std::unique_lock и освобождает соответствующий мьютекс, если им владел уничтоженный экземпляр.

Объявление

>~unique_lock();

Результат

Если >this->owns_lock() возвращает >true, то вызывает >this->mutex()->unlock().

Исключения

Нет.

>STD::UNIQUE_LOCK::SWAP, ФУНКЦИЯ-ЧЛЕН

Обменивает владение ассоциированными блокировками мьютекса между двумя объектами >std::unique_lock.

Объявление

>void swap(unique_lock& other) noexcept;

Результат

Если >other владел блокировкой мьютекса до вызова, то теперь этой блокировкой владеет >*this. Если >*this владел блокировкой мьютекса до вызова, то теперь этой блокировкой владеет >other.

Постусловия

>this.mutex() равно значению >other.mutex() до вызова, >other.mutex() равно значению >this.mutex() до вызова, >this.owns_lock() равно значению >other.owns_lock() до вызова, >other.owns_lock() равно значению >this.owns_lock() до вызова.

Исключения

Нет.

>STD::SWAP, ФУНКЦИЯ, HE ЯВЛЯЮЩАЯСЯ ЧЛЕНОМ КЛАССА

Обменивает владение ассоциированными блокировками мьютекса между двумя объектами >std::unique_lock.

Объявление

>void swap(unique_lock& lhs, unique_lock& rhs) noexcept;

Результат

>lhs.swap(rhs)

Исключения

Нет.

>STD::UNIQUE_LOCK::LOCK, ФУНКЦИЯ-ЧЛЕН

Захватывает мьютекс, ассоциированный с >*this.

Объявление

>void lock();

Предусловия

>this->mutex() != NULL, >this->owns_lock() == false.

Результат

Вызывает >this->mutex()->lock().

Исключения

Любое исключение, возбужденное >this->mutex()->lock(). Исключение типа >std::system_error с кодом ошибки >std::errc::operation_not_permitted, если >this->mutex() == NULL. Исключение типа >std::system_error с кодом ошибки >std::errc::resource_deadlock_would_occur, если >this->owns_lock() == true в момент вызова.

Постусловия

>this->owns_lock() == true.

>STD::UNIQUE_LOCK::TRY_LOCK, ФУНКЦИЯ-ЧЛЕН

Пытается захватить мьютекс, ассоциированный с >*this


Еще от автора Энтони Д Уильямс
Викиномика. Как массовое сотрудничество изменяет всё

Это знаменитый бестселлер, который научит вас использовать власть массового сотрудничества и покажет, как применять викиномику в вашем бизнесе. Переведенная более чем на двадцать языков и неоднократно номинированная на звание лучшей бизнес-книги, "Викиномика" стала обязательным чтением для деловых людей во всем мире. Она разъясняет, как массовое сотрудничество происходит не только на сайтах Wikipedia и YouTube, но и в традиционных компаниях, использующих технологии для того, чтобы вдохнуть новую жизнь в свои предприятия.Дон Тапскотт и Энтони Уильямс раскрывают принципы викиномики и рассказывают потрясающие истории о том, как массы людей (как за деньги, так и добровольно) создают новости, изучают геном человека, создают ремиксы любимой музыки, находят лекарства от болезней, редактируют школьные учебники, изобретают новую косметику, пишут программное обеспечение и даже строят мотоциклы.Знания, ресурсы и вычислительные способности миллиардов людей самоорганизуются и превращаются в новую значительную коллективную силу, действующую согласованно и управляемую с помощью блогов, вики, чатов, сетей равноправных партнеров и личные трансляции.


Рекомендуем почитать
Теоретический минимум по Computer Science

Хватит тратить время на скучные академические фолианты! Изучение Computer Science может быть веселым и увлекательным занятием. Владстон Феррейра Фило знакомит нас с вычислительным мышлением, позволяющим решать любые сложные задачи. Научиться писать код просто — пара недель на курсах, и вы «программист», но чтобы стать профи, который будет востребован всегда и везде, нужны фундаментальные знания. Здесь вы найдете только самую важную информацию, которая необходима каждому разработчику и программисту каждый день. «Эта книга пригодится и для решения повседневных задач.


Язык PL/SQL

В учебно-методическом пособии рассматриваются основы языка программирования PL/SQL, реализованного в системе управления базами данных Oracle Database Server. Приводятся сведения о поддерживаемых типах данных, структуре программ PL/SQL и выполнении SQL-предложений в них. Отдельно рассмотрено создание хранимых в базах данных Oracle программ PL/SQL – процедур, функций, пакетов и триггеров.


Перевод в электронный формат, кодированные наборы шрифтов и система Оптического Распознавания Символов для многошрифтовых информационных ресурсов на примере “Летописи журнальных статей”

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Системное программное обеспечение. Лабораторный практикум

В книге рассматриваются базисные теоретические основы, необходимые для построения компиляторов, основные технологические приемы и методы их реализации. В ней приведены различные варианты заданий для выполнения лабораторного практикума по курсу «Системное программное обеспечение», а также примеры выполнения этих заданий. В каждом примере подробно рассматриваются все особенности его выполнения, как на этапе подготовки необходимой математической базы, так и на этапе программной реализации. В лабораторных работах автор обращает внимание на основные сложности, связанные с ее выполнением, а также на возможные типичные ошибки и недочеты, дает рекомендации по возможностям программной реализации, отличным от кода, приводимого в примерах.Книга ориентирована на студентов, обучающихся в технических вузах по специальностям, связанным с вычислительной техникой.


Программирование на языке Пролог для искусственного интеллекта

Книга известного специалиста по программированию (Югославия), содержащая основы языка Пролог и его приложения для решения задач искусственного интеллекта. Изложение отличается методическими достоинствами — книга написана в хорошем стиле, живым языком. Книга дополняет имеющуюся на русском языке литературу по языку Пролог.Для программистов разной квалификации, специалистов по искусственному интеллекту, для всех изучающих программирование.


Программирование на Visual C++. Архив рассылки

РАССЫЛКА ЯВЛЯЕТСЯ ЧАСТЬЮ ПРОЕКТА RSDN, НА САЙТЕ КОТОРОГО ВСЕГДА МОЖНО НАЙТИ ВСЮ НЕОБХОДИМУЮ РАЗРАБОТЧИКУ ИНФОРМАЦИЮ, СТАТЬИ, ФОРУМЫ, РЕСУРСЫ, ПОЛНЫЙ АРХИВ ПРЕДЫДУЩИХ ВЫПУСКОВ РАССЫЛКИ И МНОГОЕ ДРУГОЕ.