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

Тут можно читать онлайн Энтони Уильямс - Параллельное программирование на С++ в действии. Практика разработки многопоточных программ - бесплатно полную версию книги (целиком) без сокращений. Жанр: comp-programming, издательство ДМК Пресс, год 2012. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.
  • Название:
    Параллельное программирование на С++ в действии. Практика разработки многопоточных программ
  • Автор:
  • Жанр:
  • Издательство:
    ДМК Пресс
  • Год:
    2012
  • Город:
    Москва
  • ISBN:
    978-5-94074-448-1
  • Рейтинг:
    5/5. Голосов: 11
  • Избранное:
    Добавить в избранное
  • Отзывы:
  • Ваша оценка:
    • 100
    • 1
    • 2
    • 3
    • 4
    • 5

Энтони Уильямс - Параллельное программирование на С++ в действии. Практика разработки многопоточных программ краткое содержание

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

Параллельное программирование на С++ в действии. Практика разработки многопоточных программ - читать онлайн бесплатно полную версию (весь текст целиком)

Параллельное программирование на С++ в действии. Практика разработки многопоточных программ - читать книгу онлайн бесплатно, автор Энтони Уильямс
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

void promise::set_value_at_thread_exit(R& r);

void promise::set_value_at_thread_exit(R const& r);

void promise::set_value_at_thread_exit(R&& r);

Предусловия

С *thisассоциирован асинхронный результат.

Результат

Сохраняет rв асинхронном результате, ассоциированном с *this, если ResultType— не void. Помечает, что в асинхронном результате хранится значение. Планирует перевод ассоциированного асинхронного результата в состояние готовности в момент завершения потока.

Постусловия

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

Исключения

Исключение типа std::future_errorс кодом ошибки std::future_errc::promise_already_satisfied, если в асинхронном результате уже находится значение или исключение. Любое исключение, возбужденное копирующим или перемещающим конструктором r.

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

Обращения к set_value(), set_value_at_thread_exit(), set_exception()и set_exception_at_thread_exit()сериализуются. Успешное обращение к set_value()происходит-раньше обращения к функции std::future::get()или std::shared_future::get(), которая извлекает сохраненное значение.

STD::PROMISE::SET_EXCEPTION , ФУНКЦИЯ-ЧЛЕН КЛАССА

Сохраняет исключение в асинхронном результате, ассоциированном с *this.

Объявление

void set_exception(std::exception_ptr e);

Предусловия

С *thisассоциирован асинхронный результат. (bool)eравно true.

Результат

Сохраняет eв асинхронном результате, ассоциированном с *this.

Постусловия

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

Исключения

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

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

Обращения к set_value(), set_value_at_thread_exit(), set_exception()и set_exception_at_thread_exit()сериализуются. Успешное обращение к set_value()происходит-раньше обращения к функции std::future::get()или std::shared_future::get(), которая извлекает сохраненное исключение.

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

Сохраняет исключение в асинхронном результате, ассоциированном с *this, но не делает этот результат готовым раньше момента завершения потока.

Объявление

void set_exception_at_thread_exit(std::exception_ptr e);

Предусловия

С *thisассоциирован асинхронный результат, (bool)eравно true.

Результат

Сохраняет eв асинхронном результате, ассоциированном с *this. Планирует перевод ассоциированного асинхронного результата в состояние готовности в момент завершения потока.

Постусловия

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

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

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

Обращения к set_value(), set_value_at_thread_exit(), set_exception()и set_exception_at_thread_exit()сериализуются. Успешное обращение к set_value()происходит-раньше обращения к функции std::future::get()или std::shared_future::get(), которая извлекает сохраненное исключение.

D.4.5. Шаблон функции std::async

Шаблон функции std::asyncдает простой способ выполнить автономную асинхронную задачу с использованием доступного аппаратного параллелизма. Обращение к std::asyncвозвращает объект std::future, который содержит результат задачи. В зависимости от политики запуска задача выполняется либо асинхронно в отдельном потоке, либо синхронно в том потоке, который вызвал функции-члены wait()или get()объекта std::future.

Объявление

enum class launch {

async, deferred

};

template

future::type>

async(Callable&& func, Args&& ... args);

template

future::type>

async(launch policy, Callable&& func, Args&& ... args);

Предусловия

Выражение INVOKE(func, args)допустимо для переданных значений funcи args. Тип Callableи все члены Argsудовлетворяют требованиям концепции MoveConstructible.

Результат

Конструирует копии funcи args...во внутренней памяти (далее обозначаются fffи xyz...соответственно).

Если policyравно std::launch::async, то вызывает функцию INVOKE(fff, xyz...)в отдельном потоке. Возвращенный объект std::futureстановится готов , когда этот поток завершится, и будет содержать либо возвращенное функцией значение, либо возбужденное ей исключение. Деструктор последнего будущего объекта, ассоциированного с асинхронным состоянием возвращенного объекта std::future, блокирует поток, пока будущий результат не будет готов .

Если policyравно std::launch::deferred, то fffи xyz...сохраняются в возвращенном объекте std::futureкак отложенный вызов функции. При первом обращении к функции-члену wait()или get()будущего результата, который разделяет то же самое ассоциированное состояние, функция INVOKE(fff, xyz...)синхронно вызывается в потоке, который обратился к wait()или get().

В ответ на вызов функции get()этого объекта std::futureлибо возвращается значение, полученное от INVOKE(fff, xyz...), либо возбуждается исключение, которое имело место в этой функции.

Если policyравно std::launch::async | std::launch::deferredили аргумент policyопущен, то поведение такое же, как если бы была задана политика std::launch::asyncили std::launch::deferred. Реализация сама выбирает нужное поведение при каждом вызове, чтобы в максимальной степени задействовать доступный аппаратный параллелизм, не вызывая при этом превышения лимита.

В любом случае функция std::asyncвозвращает управление немедленно.

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

Завершение вызова функции происходит-раньше успешного возврата из функций wait(), get(), wait_for()и wait_until()любого экземпляра std::futureили std::shared_future, который ссылается на то же ассоциированное состояние, что и объект std::future, возвращенный функцией std::async. Если policyравно std::launch::async, то завершение потока, в котором имел место вызов std::async, также происходит-раньше успешного возврата из этих функций.

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


Энтони Уильямс читать все книги автора по порядку

Энтони Уильямс - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




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


Отзывы читателей о книге Параллельное программирование на С++ в действии. Практика разработки многопоточных программ, автор: Энтони Уильямс. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x