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

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

.

Объявление

>bool try_lock();

Предусловия

Тип >Mutex, которым конкретизируется шаблон >std::unique_lock, должен удовлетворять требованиям концепции >Lockable. >this->mutex() != NULL, >this->owns_lock() == false.

Результат

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

Возвращаемое значение

>true, если вызов >this->mutex()->try_lock() вернул >true, иначе >false.

Исключения

Любое исключение, возбужденное >this->mutex()->try_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 в момент вызова.

Постусловия

Если функция возвращает >true, то >this->owns_lock() == true, иначе >this->owns_lock() == false.

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

Освобождает мьютекс, ассоциированный с >*this.

Объявление

>void unlock();

Предусловия

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

Результат

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

Исключения

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

Постусловия

>this->owns_lock() == false.

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

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

Объявление

>template

>bool try_lock_for(

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

Предусловия

Тип >Mutex, которым конкретизируется шаблон >std::unique_lock, должен удовлетворять требованиям концепции >TimedLockable. >this->mutex() != NULL, >this->owns_lock() == false.

Результат

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

Возвращаемое значение

>true, если вызов >this->mutex()->try_lock_for() вернул >true, иначе >false.

Исключения

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

Постусловия

Если функция вернула >true, то >this->owns_lock() == true, иначе >this->owns_lock() == false.

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

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

Объявление

>template

>bool try_lock_until(

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

Предусловия

Тип >Mutex, которым конкретизируется шаблон >std::unique_lock, должен удовлетворять требованиям концепции >TimedLockable. >this->mutex() != NULL, >this->owns_lock() == false.

Результат

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

Возвращаемое значение

>true, если вызов >this->mutex()->try_lock_until() вернул >true, иначе >false.

Исключения

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

Постусловия

Если функция вернула >true, то >this->owns_lock() == true, иначе >this->owns_lock() == false.

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

Проверяет, владеет ли >*this блокировкой мьютекса.

Объявление

>explicit operator bool() const noexcept;

Возвращаемое значение >this->owns_lock(). Исключения

Нет.

Примечание. Это оператор явного преобразования, поэтому он вызывается неявно только в контекстах, где результат используется как булевское значение, а не тогда, когда результат трактуется как целое, равное 0 или 1.

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

Проверяет, владеет ли >*this блокировкой мьютекса.

Объявление

>bool owns_lock() const noexcept;

Возвращаемое значение

>true, если >*this владеет блокировкой мьютекса, иначе >false.

Исключения

Нет.

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

Возвращает мьютекс, ассоциированный с >*this, если таковой имеется.

Объявление

>mutex_type* mutex() const noexcept;

Возвращаемое значение

Указатель на мьютекс, ассоциированный с >*this, если таковой имеется, иначе >NULL.

Исключения

Нет.

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

Возвращает мьютекс, ассоциированный с >*this, если таковой имеется, и разрывает эту ассоциацию.

Объявление

>mutex_type* release() noexcept;

Результат

Разрывает ассоциацию мьютекса с >*this, не освобождая блокировку.

Возвращаемое значение

Указатель на мьютекс, ассоциированный с >*this, если таковой имеется, иначе >NULL.

Постусловия

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

Исключения

Нет.

Примечание. Если >this->owns_lock() вернула бы до этого обращения >true, то с этого момента за освобождение мьютекса отвечает вызывающая программа.

D.5.7. Шаблон функции >std::lock

Шаблон функции >std::lock предоставляет возможность захватить сразу несколько мьютексов, не опасаясь возникновения взаимоблокировки из-за несогласованного порядка захвата.

Объявление

>template

>void lock(LockableType1& m1, LockableType2& m2...);


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

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


Рекомендуем почитать
Язык PL/SQL

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


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

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


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

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


Пишем драйвер Windows на ассемблере

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


Язык программирования С# 2005 и платформа .NET 2.0.

В этой книге содержится описание базовых принципов функционирования платформы .NET, системы типов .NET и различных инструментальных средств разработки, используемых при создании приложений .NET. Представлены базовые возможности языка программирования C# 2005, включая новые синтаксические конструкции, появившиеся с выходом .NET 2.0, а также синтаксис и семантика языка CIL. В книге рассматривается формат сборок .NET, библиотеки базовых классов .NET. файловый ввод-вывод, возможности удаленного доступа, конструкция приложений Windows Forms, доступ к базам данных с помощью ADO.NET, создание Web-приложений ASP.NET и Web-служб XML.


Вариации на тему STL. Адаптер обобщенного указателя на функцию-член класса

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