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

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

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

>template

>class ratio_greater_equal:

> public std::integral_constant<

>  bool, !ratio_less::value> {};

Предусловия

>R1 и >R2 должны быть конкретизациями шаблона >std::ratio.

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

В заголовке > объявлены средства для идентификации и управления потоками, а также функции для приостановки потоков.

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

>namespace std {


>class thread;


>namespace this_thread {

>thread::id get_id() noexcept;


>void yield() noexcept;


>template

>void sleep_for(

> std::chrono::duration sleep_duration);


>template

>void sleep_until(

> std::chrono::time_point wake_time);

>}

>}

D.7.1. Класс >std::thread

Класс s>td::thread применяется для управления потоком выполнения. В нем имеются средства для запуска нового потока и ожидания завершения потока, а также для идентификации потоков. Также в класс включены другие функции для управления потоком выполнения.

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

>class thread {

>public:

> // Типы

> class id;

> typedef implementation-defined

> native_handle_type; // необязательно


> // Конструкторы и деструкторы

> thread() noexcept;

> ~thread();


> template

> explicit thread(Callable&& func, Args&&... args);


> // Копирование и перемещение

> thread(thread const& other) = delete;

> thread(thread&& other) noexcept;


> thread& operator=(thread const& other) = delete;

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


> void swap(thread& other) noexcept;


> void join();

> void detach();

> bool joinable() const noexcept;


> id get_id() const noexcept;


> native_handle_type native_handle();


> static unsigned hardware_concurrency() noexcept;

>};


>void swap(thread& lhs, thread& rhs);

>STD::THREAD::ID, КЛАСС

Экземпляр класса >std::thread::id идентифицирует конкретный поток выполнения.

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

>class thread::id {

>public:

> id() noexcept;

>};


>bool operator==(thread::id x, thread::id y) noexcept;

>bool operator!=(thread::id x, thread::id y) noexcept;

>bool operator<(thread::id x, thread::id y) noexcept;

>bool operator<=(thread::id x, thread::id y) noexcept;

>bool operator>(thread::id x, thread::id y) noexcept;

>bool operator>=(thread::id x, thread::id y) noexcept;


>template

>basic_ostream&

> operator<<(basic_ostream&& out, thread::id id);

Примечание. Значение >std::thread::id, идентифицирующее конкретный поток выполнения, должно отличаться от значения экземпляра >std::thread::id, сконструированного по умолчанию, и от значения, представляющего любой другой поток.

Примечание. Значения >std::thread::id для конкретных потоков непредсказуемы и могут различаться при разных прогонах одной и той же программы.

Экземпляры >std::thread::id удовлетворяют требованиям концепций >CopyConstructible и >CopyAssignable, поэтому их можно копировать и присваивать друг другу

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

Конструирует объект >std::thread::id, который не представляет никакой поток выполнения.

Объявление

>id() noexcept;

Результат

Конструирует экземпляр >std::thread::id, с которым связано особое значение, интерпретируемое как не поток.

Исключения

Нет.

Примечания. Во всех сконструированных по умолчанию экземпляров >std::thread::id хранится одно и то же значение.

>STD::THREAD::ID, ОПЕРАТОР СРАВНЕНИЯ НА РАВЕНСТВО

Сравнивает два экземпляра >std::thread::id, проверяя, представляют ли они один и тот же поток.

Объявление

>bool operator==(

> std::thread::id lhs, std::thread::id rhs) noexcept;

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

>true, если >lhs и >rhs представляют один и тот же поток выполнения или оба имеют значение не поток, >false, если >lhs и >rhs представляют разные потоки или один представляет поток, а другой имеет значение не поток.

Исключения

Нет.

>STD::THREAD::ID, ОПЕРАТОР СРАВНЕНИЯ НА НЕРАВЕНСТВО

Сравнивает два экземпляра >std::thread::id, проверяя, представляют ли они разные потоки.

Объявление

>bool operator!=(

> std::thread::id lhs, std::thread::id rhs) noexcept;

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

>!(lhs==rhs)

Исключения

Нет.

>STD::THREAD::ID, ОПЕРАТОР СРАВНЕНИЯ МЕНЬШЕ

Сравнивает два экземпляра >std::thread::id, проверяя, предшествует ли один из них другому в смысле отношения полного порядка, существующего на множестве значений идентификаторов потоков.

Объявление

>bool operator<(

> std::thread::id lhs, std::thread::id rhs) noexcept;

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

>true, если значение >lhs предшествует значению >rhs в смысле отношения полного порядка, существующего на множестве значений идентификаторов потоков. Если >lhs != rhs, то истинно ровно одно из утверждений >lhs < rhs и >rhs < lhs, тогда как второе ложно. Если >lhs == rhs, то оба утверждения >lhs < rhs и >rhs < lhs ложны.

Исключения

Нет.

Примечание. Особое значение не поток, которое хранится в сконструированном по умолчанию экземпляре >std::thread::id, меньше любого другого экземпляра >std::thread::id, представляющего поток выполнения. Если два экземпляра >std::thread::id равны, то ни один из них не меньше другого. Любое множество различных значений >std::thread::id полностью упорядочено, и этот порядок остается непротиворечивым на всем протяжении работы программы. Порядок может изменяться при разных прогонах одной и той же программы.


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

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


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

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


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

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


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

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


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

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


Язык программирования С# 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. Адаптер обобщенного указателя на функцию-член класса

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