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

Энтони Уильямс

Объявление

thread(thread&& other) noexcept;

Результат

Конструирует экземпляр std::thread. Если с объектом other перед вызовом конструктора был ассоциирован поток выполнения, то теперь этот поток оказывается ассоциирован с вновь созданным объектом std::thread. В противном случае с вновь созданным объектом std::thread не ассоциирован никакой поток.

Постусловия

Для вновь сконструированного объекта x типа std::thread x.get_id() равно значению other.get_id() до вызова конструктора, other.get_id() == id().

Исключения

Нет.

Примечание. Объекты std::thread не удовлетворяют требованиям концепции CopyConstructible, поэтому копирующего конструктора не существует, существует только этот перемещающий конструктор.

STD::THREAD , ДЕСТРУКТОР

Уничтожает объект std::thread.

Объявление

~thread();

Результат

Уничтожает *this. Если с *this ассоциирован поток выполнения (this->joinable() возвращает true), то вызывает std::terminate(), то есть аварийно завершает программу.

Исключения

Нет.

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

Передает владение потоком выполнения от одного объекта std::thread другому.

Объявление

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

Результат

Если до вызова этого оператора this->joinable() возвращала true, то вызывает std::terminate() для аварийного завершения программы. Если с other до вызова оператора был ассоциирован поток выполнения, то после вызова он оказывается ассоциирован с *this. В противном случае с *this не ассоциирован никакой поток выполнения.

Постусловия

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 не ассоциирован никакой поток выполнения.