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

О книге

Автор книги - . Произведение относится к жанрам учебная литература, программирование. Оно опубликовано в 2025 году. Книге не присвоен международный стандартный книжный номер.

Аннотация

В книге вы узнаете что такое синхронизация, гонки данных, мьютексы, дедлоки, продвинутые техники, пулы с future, promises, async, параллельные алгоритмы, мини-сервер, отладка/оптимизация, профилирование.

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


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

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

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


Пример:

#include

#include

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(). Этот метод блокирует основной поток до тех пор, пока дочерний поток не завершит свою работу.


Рекомендации для вас