Энтони Уильямс - Параллельное программирование на С++ в действии. Практика разработки многопоточных программ
- Название:Параллельное программирование на С++ в действии. Практика разработки многопоточных программ
- Автор:
- Жанр:
- Издательство:ДМК Пресс
- Год:2012
- Город:Москва
- ISBN:978-5-94074-448-1
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Энтони Уильямс - Параллельное программирование на С++ в действии. Практика разработки многопоточных программ краткое содержание
Книга «Параллельное программирование на С++ в действии» не предполагает предварительных знаний в этой области. Вдумчиво читая ее, вы научитесь писать надежные и элегантные многопоточные программы на С++11. Вы узнаете о том, что такое потоковая модель памяти, и о том, какие средства поддержки многопоточности, в том числе запуска и синхронизации потоков, имеются в стандартной библиотеке. Попутно вы познакомитесь с различными нетривиальными проблемами программирования в условиях параллелизма.
Параллельное программирование на С++ в действии. Практика разработки многопоточных программ - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
Объявление
shared_future share();
Результат
Эквивалентно shared_future(std::move(*this))
.
Постусловия
Асинхронный результат, ассоциированный с объектом *this
перед вызовом share()
(если с ним что-то было ассоциировано), ассоциируется с вновь сконструированным экземпляром std::shared_future
. Функция this->valid()
возвращает false
.
Исключения
Нет.
STD::FUTURE::VALID
, ФУНКЦИЯ-ЧЛЕН
Проверяет, ассоциирован ли с экземпляром std::future
асинхронный результат. Объявление
bool valid() const noexcept;
Возвращаемое значение
true
, если с *this
ассоциирован асинхронный результат, иначе false
.
Исключения
Нет.
STD::FUTURE::WAIT
, ФУНКЦИЯ-ЧЛЕН
Если состояние, ассоциированное с *this
, содержит отложенную функцию, то эта функция вызывается. В противном случае ждет, пока будет готов асинхронный результат, ассоциированный с данным экземпляром std::future
.
Объявление
void wait();
Предусловия
this->valid()
должно возвращать true
.
Результат
Если ассоциированное состояние содержит отложенную функцию, то вызывает эту функцию и сохраняет возвращенное ей значение или объект-исключение в виде асинхронного результата. В противном случае блокирует поток до момента готовности асинхронного результата, ассоциированного с *this
.
Исключения
Нет.
STD::FUTURE::WAIT_FOR
, ФУНКЦИЯ-ЧЛЕН
Ждет, когда будет готов асинхронный результат, ассоциированный с данным экземпляром std::future
, или истечет заданное время.
Объявление
template
future_status wait_for(
std::chrono::duration const& relative_time);
Предусловия
this->valid()
должно возвращать true
.
Результат
Если асинхронный результат, ассоциированный с *this
, содержит отложенную функцию, полученную обращением к std::async
, и эта функция, еще не начала исполняться, то возвращает управление немедленно без блокирования потока. В противном случае блокирует поток до момента готовности асинхронного результата, ассоциированного с *this
, или до истечения времени, заданного в аргументе relative_time
.
Возвращаемое значение
std::future_status::deferred
, если асинхронный результат, ассоциированный с *this
, содержит отложенную функцию, полученную обращением к std::async
, и эта функция, еще не начала исполняться. std::future_status::ready
, если асинхронный результат, ассоциированный с *this
, готов, std::future_status::timeout
, если истекло время, заданное в аргументе relative_time
.
Примечание. Поток может быть заблокирован на время, превышающее указанное. Если возможно, время измеряется по стабильным часам.
Исключения
Нет.
STD::FUTURE::WAIT_UNTIL
, ФУНКЦИЯ-ЧЛЕН
Ждет, когда будет готов асинхронный результат, ассоциированный с данным экземпляром std::future
, или наступит заданный момент времени.
Объявление
template
future_status wait_until(
std::chrono::time_point const& absolute_time);
Предусловия
this->valid()
должно возвращать true
.
Результат
Если асинхронный результат, ассоциированный с *this
, содержит отложенную функцию, полученную обращением к std::async
, и эта функция, еще не начала исполняться, то возвращает управление немедленно без блокирования потока. В противном случае блокирует поток до момента готовности асинхронного результата, ассоциированного с *this
, или до момента, когда функция Clock::now()
вернет время, большее или равное absolute_time
.
Возвращаемое значение
std::future_status::deferred
, если асинхронный результат, ассоциированный с *this
, содержит отложенную функцию, полученную обращением к std::async
, и эта функция, еще не начала исполняться. std::future_status::ready
, если асинхронный результат, ассоциированный с *this
, готов, std::future_status::timeout
, если Clock::now()
вернула время, большее или равное absolute_time
.
Примечание. Не дается никаких гарантий относительно того, сколько времени будет блокирован вызывающий поток. Гарантируется лишь, что если функция вернула std::future_status::timeout
, то значение, возвращенное Clock::now()
, больше или равно absolute_time
в точке, где поток разблокировался.
Исключения
Нет.
STD::FUTURE::GET
, ФУНКЦИЯ-ЧЛЕН
Если ассоциированное состояние содержит отложенную функцию, полученную в результате обращения к std::async
, то вызывает эту функцию и возвращает результат. В противном случае ждет готовности асинхронного результата, ассоциированного с экземпляром std::future
, а затем либо возвращает сохраненное в нем значение, либо возбуждает сохраненное в нем исключение.
Объявление
void future::get();
R& future::get();
R future::get();
Предусловия
this->valid()
должно возвращать true
.
Результат
Если состояние, ассоциированное с *this
, содержит отложенную функцию, то вызывает эту функцию и возвращает результат или возбуждает хранящееся исключение. В противном случае блокирует поток до момента готовности асинхронного результата, ассоциированного с *this
. Если в результате хранится исключение, возбуждает его, иначе возвращает хранящееся значение.
Возвращаемое значение
Если ассоциированное состояние содержит отложенную функцию, то возвращает результат вызова этой функции. Иначе, если ResultType
— void
, то функция просто возвращает управление. Если ResultType
— R&
для некоторого типа R
, то возвращает хранящуюся ссылку. Иначе возвращает хранящееся значение.
Исключения
Исключение, возбужденное отложенной функцией или сохраненное в асинхронном результате (если таковое имеется).
Постусловие
this->valid() == false
D.4.2. Шаблон класса std::shared_future
Шаблон класса std::shared_future
предоставляет средства для ожидания результата асинхронной операции, начатой в другом потоке, и используется в сочетании с шаблонами классов std::promise
и std::packaged_task
и шаблоном функции std::async
, которая применяется для возврата асинхронного результата. В каждый момент времени ссылаться на один и тот же асинхронный результат могут несколько объектов std::shared_future
. Экземпляры std::shared_future
удовлетворяют требованиям концепций CopyConstructible
и CopyAssignable
. Разрешается также конструировать объект std::shared_future
перемещением из объекта std::future
с тем же самым параметром ResultType
.
Обращения к данному экземпляру std::shared_future
не синхронизированы. Поэтому доступ к одному экземпляру std::shared_future
из разных потоков без внешней синхронизации не безопасен . Однако обращения к ассоциированному состоянию синхронизированы, поэтому несколько потоков могут безопасно обращаться к разным экземплярам std::shared_future
, которые разделяют одно и то же ассоциированное состояние, без внешней синхронизации.
Интервал:
Закладка: