Алексей Примак
C++. Многопоточное программирование – это легко и просто

Основы работы с потоками в C++

1. Создание потока

Потоки в C++ создаются с использованием класса std::thread из библиотеки <thread>. Каждый объект типа std::thread представляет отдельный поток выполнения.

Пример:

#include <iostream

#include <thread>

void threadFunction() {

std::cout << "Привет я поток" << std::endl;

}

int main() {

std::thread t(threadFunction); // Создаем поток

t.join(); // Ждём завершения потока

return 0;

}

Разбор:

std::thread t(threadFunction) создаёт новый поток, который выполняет функцию threadFunction.t.join() блокирует основной поток до тех пор, пока дочерний поток не завершится. Если не вызвать join() или detach(), программа завершится с ошибкой: std::terminate() будет вызван в деструкторе объекта std::thread.

1.2 Join vs Detach

В C++ потоки (threads) могут быть либо joinable (соединяемыми), либо detached (отсоединенными). Это два разных состояния управления жизненным циклом потока, и выбор между ними определяет, как основной поток будет взаимодействовать с дочерними потоками. Давайте разберем эти понятия подробно.

1.2.1 Joinable потоки

Когда вы создаете поток в C++, он по умолчанию является joinable. Это означает, что основной поток может "дождаться" завершения выполнения этого потока, вызвав метод join(). Этот метод блокирует основной поток до тех пор, пока дочерний поток не завершит свою работу.

Конец ознакомительного фрагмента.

Текст предоставлен ООО «Литрес».

Прочитайте эту книгу целиком, купив полную легальную версию на Литрес.

Безопасно оплатить книгу можно банковской картой Visa, MasterCard, Maestro, со счета мобильного телефона, с платежного терминала, в салоне МТС или Связной, через PayPal, WebMoney, Яндекс.Деньги, QIWI Кошелек, бонусными картами или другим удобным Вам способом.