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

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

>, TYPEDEF

Псевдоним типа для конкретизации шаблонного класса >std::ratio, которая определяет наименьшее число секунд (или долей секунды) между различающимися значениями >duration или >time_point. Псевдоним >period определяет точность часов, а не частоту тактов.

Объявление

>typedef std::ratio<unspecified, unspecified> period;

>STD::CHRONO::STEADY_CLOCK::DURATION, TYPEDEF

Конкретизация шаблонного класса >std::chrono::duration, в которой может храниться разность между любыми двумя моментами времени, полученными от системных стабильных часов.

Объявление

>typedef std::chrono::duration<

> std::chrono::steady_clock::rep,

> std::chrono::steady_clock::period> duration;

>STD::CHRONO::STEADY_CLOCK::TIME_POINT, TYPEDEF

Конкретизация шаблонного класса >std::chrono::time_point, в которой могут храниться моменты времени, полученные от системных стабильных часов.

Объявление

>typedef std::chrono::time_point

>time_point;

>STD::CHRONO::STEADY_CLOCK::NOW, СТАТИЧЕСКАЯ ФУНКЦИЯ-ЧЛЕН

Получает текущее время от системных стабильных часов.

Объявление

>time_point now() noexcept;

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

Экземпляр >time_point, представляющий текущее время но системным стабильным часам.

Исключения

Возбуждает исключение >std::system_error в случае ошибки.

Синхронизация

Если одно обращение к >std::chrono::steady_clock::now() происходит-раньше другого, то момент времени >time_point, возвращенный при первом обращении, меньше или равен моменту времени >time_point, возвращенному при втором обращении.

D.1.5. Псевдоним типа >std::chrono::high_resolution_clock

Класс >std::chrono::high_resolution_clock предоставляет доступ к системным часам максимально высокого разрешения. Как и для всех остальных часов, текущее время можно получить от функции >std::chrono::high_resolution_clock::now(). Имя >std::chrono::high_resolution_clock может быть псевдонимом класса >std::chrono::system_clock или класса >std::chrono::steady_clock, либо отдельным типом.

Хотя тип >std::chrono::high_resolution_clock дает самое высокое разрешение среди всех входящих в библиотеку часов, обращение к функции >std::chrono::high_resolution_clock::now() все же занимает конечное время. Поэтому, пытаясь хронометрировать очень короткие операции, учитывайте накладные расходы на вызов этой функции.

Определение класса

>class high_resolution_clock {

>public:

> typedef unspecified-integral-type rep;

> typedef std::ratio<

>  unspecified, unspecified> period;

> typedef std::chrono::duration duration;

> typedef std::chrono::time_point<

>  unspecified> time_point;

> static const bool is_steady = unspecified;


> static time_point now() noexcept;

>};

D.2. Заголовок >

Заголовок > предоставляет доступ к условным переменным. Это базовый механизм синхронизации, который позволяет блокировать поток до получения уведомления о том, что выполнено некоторое условие или истек таймаут.

Содержимое заголовка

>namespace std {

>enum class cv_status { timeout, no_timeout };


>class condition_variable;

>class condition_variable_any;

>}

D.2.1. Класс >std::condition_variable

Класс >std::condition_variable позволяет потоку ждать выполнения условия.

Экземпляры этого класса не удовлетворяют концепциям >CopyAssignable, >CopyConstructible, >MoveAssignable, >MoveConstructible.

Определение класса

>class condition_variable {

>public:

> condition_variable();

> ~condition_variable();


> condition_variable(condition_variable const&) = delete;

> condition_variable& operator=(

>  condition_variable const&) = delete;


> void notify_one() noexcept;

> void notify_all() noexcept;


> void wait(std::unique_lock& lock);


> template

> void wait(std::unique_lock& lock, Predicate pred);


> template

> cv_status wait_until(

>  std::unique_lock& lock,

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


> template

> bool wait_until(

>  std::unique_lock& lock,

>  const std::chrono::time_point& absolute_time,

>  Predicate pred);


> template

> cv_status wait_for(

>  std::unique_lock& lock,

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


> template

> bool wait_for(

>  std::unique_lock& lock,

>  const std::chrono::duration& relative_time,

>  Predicate pred);

>};


>void notify_all_at_thread_exit(

> condition_variable&, unique_lock);

>STD::CONDITION_VARIABLE, КОНСТРУКТОР ПО УМОЛЧАНИЮ

Конструирует объект типа >std::condition_variable.

Объявление

>condition_variable();

Результат

Конструирует объект типа >std::condition_variable.

Исключения

Исключение типа >std::system_error, если сконструировать условную переменную не получилось.

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

Уничтожает объект >std::condition_variable.

Объявление

>~condition_variable();

Предусловия

Не существует потоков, заблокированных по >*this в обращениях к >wait(), >wait_for() или >wait_until().

Результат

Уничтожает >*this.

Исключения

Нет.

>STD::CONDITION_VARIABLE::NOTIFY_ONE, ФУНКЦИЯ-ЧЛЕН

Пробуждает один из потоков, ожидающих


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

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


Рекомендуем почитать
Pro Git

Разработчику часто требуется много сторонних инструментов, чтобы создавать и поддерживать проект. Система Git — один из таких инструментов и используется для контроля промежуточных версий вашего приложения, позволяя вам исправлять ошибки, откатывать к старой версии, разрабатывать проект в команде и сливать его потом. В книге вы узнаете об основах работы с Git: установка, ключевые команды, gitHub и многое другое.В книге рассматриваются следующие темы:основы Git;ветвление в Git;Git на сервере;распределённый Git;GitHub;инструменты Git;настройка Git;Git и другие системы контроля версий.


Программное обеспечение и его разработка

Автор книги — американский специалист по программированию, один из руководителей фирмы IBM, в своей книге делает попытку изложить общие проблемы создания программного обеспечения, его сопровождения и использования. Особенно подробно рассматриваются все фазы разработки программ разных типов. Изложение ясное, удачно иллюстрировано примерами.Для программистов разной квалификации и пользователей ЭВМ.fb2: ВНИМАНИЕ. В тексте присутствуют таблицы. Рекомендуется читать файл с помощью программы, поддерживающей их отображение.


Создание инструмента научных исследований на основе XML: Проблемы и методология

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


Java 7

Рассмотрено все необходимое для разработки, компиляции, отладки и запуска приложений Java. Изложены практические приемы использования как традиционных, так и новейших конструкций объектно-ориентированного языка Java, графической библиотеки классов Swing, расширенной библиотеки Java 2D, работа со звуком, печать, способы русификации программ. Приведено полное описание нововведений Java SE 7: двоичная запись чисел, строковые варианты разветвлений, "ромбовидный оператор", NIO2, новые средства многопоточности и др.


Идиомы и стили С++

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


Тонкости дизассемблирования

Очень часто под рукой не оказывается ни отладчика, ни дизассемблера, ни даже компилятора, чтобы набросать хотя бы примитивный трассировщик. Разумеется, что говорить о взломе современных защитных механизмов в таких условиях просто смешно, но что делать если жизнь заставляет?..