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

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

Объявление

>void make_ready_at_thread_exit(ArgTypes... args);

Предусловия

С >*this ассоциирована задача.

Результат

Вызывает ассоциированную задачу, как если бы было выполнено предложение >INVOKE(func, args...). Если вызов завершается нормально, то сохраняет возвращенное значение в асинхронном результате, ассоциированном с >*this. Если задача возбуждает исключение, то сохраняет это исключение в асинхронном результате, ассоциированном с >*this. Планирует перевод ассоциированного асинхронного результата в состояние готовности в момент завершения потока.

Постусловия

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

Исключения

Исключение типа >std::future_error с кодом ошибки >std::future_errc::promise_already_satisfied, если в асинхронном результате уже находится значение или исключение. Исключение типа >std::future_error с кодом ошибки >std::future_errc::no_state, если с >*this не ассоциировано асинхронное состояние. Синхронизация

Завершение потока, в котором была успешно вызвала функция >make_ready_at_thread_exit(), синхронизируется-с обращением к >std::future::get() или >std::shared_future::get(), которое извлекает хранимое значение или исключение.

D.4.4. Шаблон класса >std::promise

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

Параметр >ResultType — это тип значения, сохраняемого в асинхронном результате.

Объект >std::future, ассоциированный с асинхронным результатом конкретного экземпляра >std::promise, можно получить путем обращения к функции-члену >get_future(). В асинхронный результат записывается либо значение типа >ResultType функцией-членом >set_value(), либо исключение функцией-членом >set_exception().

Экземпляры >std::promise удовлетворяют требованиям концепций >MoveConstructible и >MoveAssignable, но не >CopyConstructibleили>CopyAssignable.

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

>template

>class promise {

>public:

>promise();

>promise(promise&&) noexcept;

>~promise();

>promise& operator=(promise&&) noexcept;


>template

>promise(std::allocator_arg_t, Allocator const&);


>promise(promise const&) = delete;

>promise& operator=(promise const&) = delete;


>void swap(promise&) noexcept;

>std::future get_future();


>void set_value(see description);

>void set_exception(std::exception_ptr p);

>};

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

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

Объявление

>promise();

Результат

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

Исключения

Исключение типа >std::bad_alloc, если конструктор не смог выделить память для асинхронного результата.

>STD::PROMISE, КОНСТРУКТОР С РАСПРЕДЕЛИТЕЛЕМ

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

Объявление

>template

>promise(std::allocator_arg_t, Allocator const& alloc);

Результат

Конструирует экземпляр >std::promise, с которым ассоциировал неготовый асинхронный результат типа >ResultType. Память под асинхронный результат выделяется с помощью распределителя >alloc.

Исключения

Любое исключение, возбуждаемое распределителем в случае неудачной попытки выделить память под асинхронный результат.

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

Конструирует один объект >std::promise из другого, передавая владение асинхронным результатом от объекта >other вновь сконструированному.

Объявление

>promise(promise&& other) noexcept;

Результат

Конструирует новый экземпляр >std::promise.

Постусловия

Асинхронный результат, который был ассоциирован с объектом >other до вызова конструктор, ассоциируется с вновь сконструированным объектом >std::promise. С объектом >other больше не ассоциирован никакой асинхронный результат.

Исключения

Нет.

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

Передает владение асинхронным результатом, ассоциированным с объектом >std::promise, другому объекту.

Объявление

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

Результат

Передает владение асинхронным результатом, ассоциированным с >*this. Если с >*this уже был ассоциирован асинхронный результат, то результат становится готов, причем в него помещается исключение >std::future_error с кодом ошибки >std::future_errc::broken_promise.

Постусловия

Асинхронный результат, который был ассоциирован с объектом >other до вызова перемещающего оператора присваивания, ассоциируется с >*this. С объектом >other больше не ассоциирован никакой асинхронный результат.

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

>*this

Исключения

Нет.

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

Обменивает владение асинхронными результатами, ассоциированными с двумя объектами >std::promise.

Объявление

>void swap(promise& other);

Результат

Обменивает владение асинхронными результатами, ассоциированными с объектами >other и >*this.

Постусловия

Асинхронный результат, который был ассоциирован с объектом


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

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


Рекомендуем почитать
Справочник по PHP

Вниманию читателей предлагается справочник по PHP.Справочник предназначается для людей, уже освоивших азы программирования на языке PHP.Справочник создан на основе информации, предоставленной на сайте «Справочник Web-языков» www.spravkaweb.ru.


Стандарты программирования на С++. 101 правило и рекомендация

Эта книга поможет новичку стать профессионалом, так как в ней представлен сконцентрированный лучший опыт программистов на С++, обобщенный двумя экспертами мирового класса.Начинающий программист найдет в ней простые и понятные рекомендации для ежедневного использования, подкрепленные примерами их конкретного применения на практике.Опытные программисты найдут в ней советы и новые рекомендации, которые можно сразу же принять на вооружение. Программисты-профессионалы могут использовать эту книгу как основу для разработки собственных стандартов кодирования, как для себя лично, так и для группы, которой они руководят.Конечно, книга рассчитана в первую очередь на профессиональных программистов с глубокими знаниями языка, однако она будет полезна любому, кто захочет углубить свои знания в данной области.


Практика и проблематика моделирования бизнес-процессов

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


Освой самостоятельно С++ за 21 день

В книге широко представлены возможности новейшей версии программного продукта Microsoft Visual C++. Подробно описаны средства и подходы программирования современных профессиональных приложений. Материалы книги дополнены многочисленными демонстрационными программами, в процессе разработки которых максимально используются возможности программных инструментов Microsoft Visual Studio. Особое внимание уделено новинкам версии 6.0 и новейшим технологиям объектно-ориентированного программирования, включая использование библиотеки MFC и шаблонов классов, а также создание связанных списков.


Использование ListView в режиме виртуального списка

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


MFC и OpenGL

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