Энтони Уильямс - Параллельное программирование на С++ в действии. Практика разработки многопоточных программ
- Название:Параллельное программирование на С++ в действии. Практика разработки многопоточных программ
- Автор:
- Жанр:
- Издательство:ДМК Пресс
- Год:2012
- Город:Москва
- ISBN:978-5-94074-448-1
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Энтони Уильямс - Параллельное программирование на С++ в действии. Практика разработки многопоточных программ краткое содержание
Книга «Параллельное программирование на С++ в действии» не предполагает предварительных знаний в этой области. Вдумчиво читая ее, вы научитесь писать надежные и элегантные многопоточные программы на С++11. Вы узнаете о том, что такое потоковая модель памяти, и о том, какие средства поддержки многопоточности, в том числе запуска и синхронизации потоков, имеются в стандартной библиотеке. Попутно вы познакомитесь с различными нетривиальными проблемами программирования в условиях параллелизма.
Параллельное программирование на С++ в действии. Практика разработки многопоточных программ - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
Постусловия
this->get_id()
равно значению other.get_id()
до вызова конструктора. other.get_id() == id()
.
Исключения
Нет.
Примечание. Объекты std::thread
не удовлетворяют требованиям концепции CopyAssignable
, поэтому копирующего оператора присваивания не существует, существует только этот перемещающий оператор присваивания.
STD::THREAD::SWAP
, ФУНКЦИЯ-ЧЛЕН
Обменивает владение ассоциированными потоками выполнения между двумя объектами std::thread
.
Объявление
void swap(thread& other) noexcept;
Результат
Если с other
до вызова функции был ассоциирован поток выполнения, то после вызова он оказывается ассоциирован с *this
. В противном случае с *this
не ассоциирован никакой поток выполнения. Если с *this
до вызова функции был ассоциирован поток выполнения, то после вызова он оказывается ассоциирован с other
. В противном случае с other
не ассоциирован никакой поток выполнения.
Постусловия
this->get_id()
равно значению other.get_id()
до вызова функции. other.get_id()
равно значению this->get_id()
до вызова функции.
Исключения
Нет.
STD::THREAD::SWAP
, ФУНКЦИЯ, НЕ ЯВЛЯЮЩАЯСЯ ЧЛЕНОМ КЛАССА
Обменивает владение ассоциированными потоками выполнения между двумя объектами std::thread
.
Объявление
void swap(thread& lhs, thread& rhs) noexcept;
Результат
lhs.swap(rhs)
Исключения
Нет.
STD::THREAD::JOINABLE
, ФУНКЦИЯ-ЧЛЕН
Опрашивает, ассоциирован ли с *this
поток выполнения.
Объявление
bool joinable() const noexcept;
Возвращаемое значение
true
, если с *this
ассоциирован поток выполнения, иначе false
.
Исключения
Нет.
STD::THREAD::JOIN
, ФУНКЦИЯ-ЧЛЕН
Ожидает завершения потока выполнения, ассоциированного с *this
.
Объявление
void jоin();
Предусловия
this->joinable()
должна возвращать true
.
Результат
Блокирует текущий поток, пока не завершится поток, ассоциированный с *this
.
Постусловия
this->get_id() == id()
. Поток выполнения, который был ассоциирован с *this
до вызова этой функции, завершился.
Синхронизация
Завершение потока выполнения, который был ассоциирован с *this
до вызова этой функции, происходит-раньше возврата из jоin()
.
Исключения
std::system_error
, если требуемого эффекта добиться не удалось или если this->joinable()
возвращает false
.
STD::THREAD::DETACH
, ФУНКЦИЯ-ЧЛЕН
Отсоединяет поток выполнения, ассоциированный с *this
.
Объявление
void detach();
Предусловия
this->joinable()
возвращает true
.
Результат
Отсоединяет поток выполнения, ассоциированный с *this
.
Постусловия
this->get_id() == id()
, this->joinable() == false
. Поток выполнения, который был ассоциирован с *this
до вызова этой функции, отсоединен и более не ассоциирован ни с каким объектом std::thread
.
Исключения
std::system_error
, если требуемого эффекта добиться не удалось или если this->joinable()
возвращает false
в момент вызова.
STD::THREAD::GET_ID
, ФУНКЦИЯ-ЧЛЕН
Возвращает значение типа s td::thread::id
, идентифицирующее поток выполнения, ассоциированный с *this
.
Объявление
thread::id get_id() const noexcept;
Возвращаемое значение
Если с *this
ассоциирован поток выполнения, то возвращает экземпляр std::thread::id
, который идентифицирует этот поток. В противном случае возвращает сконструированный по умолчанию экземпляр std::thread::id
.
Исключения
Нет.
STD::THREAD::HARDWARE_CONCURRENCY
, СТАТИЧЕСКАЯ ФУНКЦИЯ-ЧЛЕН
Возвращает информацию о том, сколько потоков могут одновременно работать на имеющемся оборудовании.
Объявление
unsigned hardware_concurrency() noexcept;
Возвращаемое значение
Количество потоков, которые могут одновременно исполняться на имеющемся оборудовании. Например, это может быть число процессоров. Если информация недоступна или определена неточно, возвращает 0.
Исключения
Нет.
D.7.2. Пространство имен this_thread
Функции из пространства имен std::this_thread
применяются к вызывающему потоку.
STD::THIS_THREAD::GET_ID
, ФУНКЦИЯ, НЕ ЯВЛЯЮЩАЯСЯ ЧЛЕНОМ КЛАССА
Возвращает значение типа std::thread::id
, идентифицирующее текущий поток выполнения.
Объявление
thread::id get_id() noexcept;
Возвращаемое значение
Экземпляр std::thread::id
, идентифицирующий текущий поток выполнения.
Исключения
Нет.
STD::THIS_THREAD::YIELD
, ФУНКЦИЯ, HE ЯВЛЯЮЩАЯСЯ ЧЛЕНОМ КЛАССА
Информирует библиотеку о том, что поток, вызвавший эту функцию, в данный момент не хочет выполняться. Обычно используется в коротких циклах, чтобы не потреблять излишне много процессорного времени.
Объявление
void yield() noexcept;
Результат
Предоставляет библиотеке возможность запланировать другой поток вместо текущего.
Исключения
Нет.
STD::THIS_THREAD::SLEEP_FOR
, ФУНКЦИЯ, НЕ ЯВЛЯЮЩАЯСЯ ЧЛЕНОМ КЛАССА
Приостанавливает выполнение текущего потока на указанное время.
Объявление
template
void sleep_for(
std::chrono::duration const& relative_time);
Результат
Приостанавливает выполнение текущего потока на указанное время relative_time
.
Примечание. Поток может быть блокирован дольше, чем указано. Если возможно, истекшее время измеряется по стабильным часам.
Исключения
Нет.
STD::THIS_THREAD::SLEEP_UNTIL
, ФУНКЦИЯ, НЕ ЯВЛЯЮЩАЯСЯ ЧЛЕНОМ КЛАССА
Приостанавливает выполнение текущего потока до указанного момента времени.
Объявление
template
void sleep_until(
std::chrono::time_point const& absolute_time);
Результат
Приостанавливает выполнение текущего потока до наступления момента absolute_time
по указанным часам Clock
.
Примечание. Не дается никаких гарантий относительно того, сколько времени будет блокирован вызывающий поток. Гарантируется лишь, что значение, возвращенное Clock::now()
, больше или равно absolute_time
в точке, где поток разблокировался.
Исключения
Нет.
Ресурсы
Печатные ресурсы
Cargill, Tom, "Exception Handling: A False Sense of Security," in С++ Report 6, no. 9, (November-December 1994). Доступно также по адресу http://www.informit.com/content/images/020163371x/supplements/Exception_Handling_Article.html.
Hoare, C.A.R., Communicating Sequential Processes (Prentice Hall International, 1985), ISBN 0131532898. Доступно также по адресу http://www.usingcsp.com/cspbook.pdf. [22] Имеется русский перевод. Ч. Хоар «Взаимодействующие последовательные процессы», Мир, 1989. Прим. перев .
Интервал:
Закладка: