C++ Concurrency in Action (Параллельное программирование на C++ в действии)
Практическое руководство по многопоточности и асинхронности в C++
Краткое содержимое:
Введение
Книга «C++ Concurrency in Action» (второе издание, 2019) Энтони Уильямса — это, пожалуй, самый авторитетный и глубокий учебник по многопоточному и параллельному программированию на языке C++. Автор, являющийся членом комитета по стандартизации C++ и разработчиком библиотеки just::thread, не просто описывает синтаксис, а учит мыслить в категориях конкурентности, избегать гонок данных и строить эффективные, безопасные и масштабируемые системы. Книга охватывает как базовые механизмы (std::thread, мьютексы, условные переменные), так и продвинутые темы (атомарные операции, lock-free структуры, модель памяти C++).
О чём книга
Издание 2019 года полностью переработано под стандарты C++14 и C++17. Книга состоит из 13 глав, разделённых на две части: основы и продвинутые техники. Первая часть знакомит с управлением потоками, защитой разделяемых данных, синхронизацией и асинхронными задачами. Вторая часть погружает в атомарные типы, модель памяти C++, проектирование lock-free контейнеров, параллельные алгоритмы и тестирование многопоточного кода. Каждая глава содержит множество практических примеров, от простого пула потоков до реализации очереди без блокировок.
Для кого эта книга
Книга рассчитана на опытных разработчиков на C++, которые уже уверенно пишут на C++11/14/17 и хотят освоить многопоточность. Новичкам в C++ будет сложно — предполагается знание шаблонов, умных указателей, лямбда-выражений и STL. Однако если вы уже имеете базовый опыт работы с потоками в других языках (Java, C#) и хотите понять специфику C++, книга станет отличным мостом.
Что узнает читатель
- Управление потоками: создание, присоединение, отсоединение, передача аргументов, идентификация потоков.
- Защита разделяемых данных: std::mutex, std::lock_guard, std::unique_lock, рекурсивные и разделяемые мьютексы, deadlock и его предотвращение.
- Синхронизация: условные переменные (std::condition_variable), std::future, std::promise, std::packaged_task, std::async.
- Атомарные операции: std::atomic, модели упорядочения (relaxed, acquire, release, seq_cst), барьеры памяти.
- Модель памяти C++: формальное описание happens-before, синхронизация, гонки данных.
- Lock-free программирование: проектирование безблокировочных стеков, очередей, хеш-таблиц.
- Параллельные алгоритмы: std::for_each, std::find, std::reduce с политиками выполнения (std::execution::par).
- Тестирование и отладка: поиск гонок, тестирование многопоточного кода, инструменты (ThreadSanitizer).
Сильные стороны
Главное достоинство книги — глубина и точность. Энтони Уильямс не просто показывает, как использовать API, но и объясняет, почему код работает именно так, какие гарантии даёт стандарт и как избежать подводных камней. Особенно ценно подробное описание модели памяти C++ — темы, которая обычно остаётся «чёрным ящиком» для большинства разработчиков. Примеры кода реальны, хорошо прокомментированы и часто сопровождаются диаграммами. Второе издание включает главу о параллельных алгоритмах STL и обновлённые примеры под C++17.
Кому рекомендуется
Книга обязательна к прочтению всем, кто пишет высоконагруженные серверы, игровые движки, финансовые системы, базы данных или любое другое ПО, где важна производительность и корректность при параллельном исполнении. Она также будет полезна разработчикам библиотек и фреймворков, желающим создавать потоко-безопасные компоненты. Если вы готовитесь к собеседованию в компанию, где активно используют C++ (например, в сфере HFT, геймдева или системного программирования), эта книга даст вам фундаментальные знания, которые выделят вас среди других кандидатов.