PR:この記事にはアフィリエイトリンクが含まれます。
C++の並行処理本を探すと、スレッド入門からatomicやメモリモデル、ロックフリーまで候補が広くて迷いますよね。実務では用語を覚えるだけでなく、共有データの競合を防ぐ方法まで考えます。
ここではC++11以降を扱う5冊を、内容と読者層に沿って紹介します。英語の専門書や日本語の体系書に加え、性能改善まで扱う本もあります。
スレッドの基礎から学びたい人もいれば、atomicやメモリ順序を詳しく知りたい人もいるでしょう。性能改善を仕事にする方に合う本もあります。
技術書の早見表
| 本 | 主な対象 | 内容の軸 |
|---|---|---|
C++ Concurrency in Action, Second Edition | CとC++の中級開発者 | スレッド、atomic、メモリモデル、並行設計 |
| Concurrency with Modern C++ | 並行処理の全体像を学びたい人 | 同期、メモリモデル、ケーススタディ |
C++ High Performance | 性能改善に取り組む開発者 | 計測、atomic、低レイテンシと高スループット |
C++20 for Programmers: An Objects-Natural Approach | 他言語経験のある独習者 | C++20の標準機能と実践例 |
プログラミング言語C++ 第4版 | 日本語で基礎を読みたい人 | C++11の並行処理、atomic、スレッドとタスク |
英語の本は4冊で、いずれも原書で読む形です。専門用語が気になる方には、日本語の本から始める方法もあります。
各書で中心になるテーマは異なります。スレッド管理を扱う本もあれば、メモリモデルを詳しく解説する本もあります。
実装例と扱う規格を見比べると、学びたい内容に近い本が分かります。まずは全体の違いをつかんでください。
並行処理の基礎
並行処理では複数の処理が同時期に進みます。別々のデータを扱えば問題は起きにくいものの、複数スレッドが同じ値を読んだり書いたりすると、結果が実行順に左右されます。
共有カウンターへの加算も油断できません。読み取り、計算、書き戻しに分かれるため、二つのスレッドが同時に動けば更新が失われることも。こうした競合がデータ競合です。
mutexは共有データへの立ち入りを順番に制限します。atomicは特定の値への操作を安全に行う道具です。ただし、関連する複数の値まで自動で整合するわけではありません。
メモリモデルが定めるのは、スレッド間で読み書きがどんな順序で見えるかです。メモリオーダを弱くすれば速くなる、と単純には言えません。必要な同期が崩れれば、別のデータが準備される前に読まれることもあります。
実践を積む定番
Anthony Williams著のC++ Concurrency in Action, Second Editionは2019年刊で、592ページ。C++14・C++17の変更を反映した中級のCとC++開発者向けです。並行処理の予備知識なしで読み始められます。
スレッドの起動と管理から、共有データの同期や並行コード設計まで扱います。基礎を実装につなげたい方におすすめです。
特に注目したいのは第5章。C++メモリモデル、atomic型と操作、スレッド間の同期や順序付けを解説します。メモリオーダを雰囲気で書いていた人が、その意味を整理する助けになるでしょう。
後半ではロックベースとロックフリーのデータ構造、並列アルゴリズム、テストやデバッグの例を扱います。各章の実例や課題を使い、小さなコードを書きながら学べます。
規格を横断する
Rainer Grimm著のConcurrency with Modern C++は2019年刊、543ページの英語書籍です。並行処理の予備知識がなくても、スレッドや共有データからメモリモデルへ進める構成です。
C++11・C++14を基礎に、C++17の並列アルゴリズムやC++20のatomic_refを扱い、C++23にも触れます。規格ごとに標準ライブラリがどう広がったかを追いたい方には、範囲の広さが魅力です。
メモリモデルとatomicは独立した章で扱い、同期と順序制約やフェンスも解説します。CppMemを使った最適化の検討例もあり、許される実行順を考える練習になります。
ベクトル合計、スレッドセーフなSingleton、標準ライブラリの並列アルゴリズムなどをケーススタディで扱います。用語を学んだあと、具体例を追いたい方におすすめです。
性能まで学ぶ本
C++ High Performance第2版は、Björn AndristとViktor Sehrの著書です。2020年12月刊で544ページ、C++20に対応しています。
第11章ではスレッドサポートライブラリとatomicライブラリを紹介し、C++メモリモデルも扱います。mutexやatomicによるデータ競合の回避と、短いロックフリー実装例も含まれます。
計測方法やホットスポット、マイクロベンチマークも取り上げています。並行化の後に処理が速くなったか、自分で測って確かめる視点が得られます。
低レイテンシや高スループットの指針も載っています。応答時間や処理量の改善を担当する方におすすめです。性能改善と並行処理を一緒に学べます。
C++20を広く学ぶ
C++20 for Programmers: An Objects-Natural Approachは、Paul DeitelとHarvey M. Deitelによる2022年刊、960ページの英語書籍です。別の高水準言語を使った経験があるプログラマ向けに、C++20を中心に幅広く解説します。
並行処理ではstd::jthreadやstd::asyncに加え、producer-consumer、共有可変データの同期、reader-writerを扱います。標準ライブラリを使う典型的な処理の形を学べます。
atomicの概要やC++20のlatch、barrier、semaphoreも登場します。複数スレッドの進行をそろえたり、処理開始を待たせたりする機能です。mutex以外の同期方法も学べます。
C++11・14・17の流れとC++23の展望にも触れ、200以上の実践的なコード例を掲げています。英語で分厚い本を読む負担はありますが、C++20の機能を周辺知識とまとめて学ぶ教材です。
日本語で体系的に
ビャーネ・ストラウストラップ著、柴田望洋訳のプログラミング言語C++ 第4版は、2015年刊、1360ページ。日本語で読めるC++11対応の体系書で、著者自身の視点から言語の考え方を学べます。
並行処理は第41章と第42章にまとまっています。スレッドとタスクを扱い、mutex、条件変数、future、promise、async、並列findの例へと進みます。同期機能を幅広く見渡せる内容です。
atomic型やフラグ、フェンスのほか、メモリ位置、命令の順序変更、メモリオーダ、データ競合も取り上げます。実務で出会う基本概念を日本語で整理したい方に適しています。
参考価格は9,680円(税込)の公式希望小売価格です。実売価格は時期や販売店で変わります。C++20のjthreadなど近年の標準機能も学ぶ場合は、C++20対応書を併読すると知識をつなげやすくなります。
現場で差が出る点
まず確認したいのは、共有データの更新を誰が管理するかです。共有カウンターへの通常の加算はスレッドセーフではなく、atomicにするかmutexで守る必要があります。データ競合は未定義動作につながります。
単独のカウンターを数えるだけなら、値の順序付けを必要としない場面もあります。ただしatomicの値を合図に別のデータを公開するなら、読み書きの順序を設計しなければなりません。releaseとacquireを学ぶ理由です。
複数の値をひとまとまりとして更新する処理では、mutexで不変条件を守るほうが読みやすいことがあります。ロックフリーという言葉だけで決めず、要件とコードの理解しやすさも確認しましょう。
速度が課題なら、計測して遅い場所を特定します。スレッド数を増やしても、共有データの競合や仕事の分割方法によっては遅くなる場合があります。改善前後を数値で確かめる習慣も、性能を学ぶ価値のひとつです。
結論
スレッド、atomic、メモリモデルを実務につなげたい中級者には、C++ Concurrency in Action, Second Editionをまずおすすめします。基本から第5章の順序制約、さらにロックフリー例まで一冊でたどれるのが強みです。
英語に不安があり、日本語を優先するならプログラミング言語C++ 第4版が候補です。C++11の基礎を固めたうえで、C++20の機能やメモリモデルを新しい実例で補うと、現場のコードに近づけやすくなります。
性能測定が主な課題ならC++ High Performance、C++20の標準機能を広く学びたいならC++20 for Programmers: An Objects-Natural Approachがおすすめです。自分の課題に合う一冊から始めれば、学んだ内容を実装やレビューに持ち込みやすいでしょう。
Amazon の PC をスコア化してみた
Amazonにある8〜14インチの小型WindowsタブレットやノートPCを、スペック別にスコア化して比較・ランキング。





