
|
251
7 章
並行 API
C++11 の偉業の 1 つに言語とライブラリへの並行性の導入があります。C++ 以外のスレッド API
に慣れたプログラマが(pthread や Windows スレッド)、スパルタ式とも言える比較的質実剛健な
C++ の並行機能セットに驚くことがありますが、これは C++ の並行対応作業の大部分がコンパイラ
開発側が負担する形で実現されたおかげです。その結果、標準規格として C++ の歴史上初めて、ど
のプラットフォームでも動作が変わらないマルチスレッドプログラムの開発が保証されました。こ
こから表現力豊富なライブラリを築けられ、堅牢な基礎が出来上がったのです。標準ライブラリの
並行部品は(タスク、future、thread、mutex、条件変数、atomic、その他)、成長する C++ 並行ソ
フトウェア開発の豊富なツールセットの第一歩に過ぎません。
以降の項目では、標準ライブラリには 2 つのテンプレート、std::future と std::shared_future
があると忘れずに覚えておいてください。ほとんどの場面でその差異は重要ではないため、本書で
はその両方を指し、単に future と表記します。
項目 35:スレッドベースよりもタスクベースプログラミングを優先
する
関数 doAsyncWork を非同期に実行する場合、基礎となる選択肢が 2 つあります。1 つは std::
thread を作成し、そのスレッド上で doAsyncWork を実行する