async関数launch::asyncポリシーとfutureのちょっと特殊な動作, 同(続き)の続き。
async関数動作でlaunch::asyncポリシーが選択された場合のみ、futureオブジェクトのデストラクタではasync関数が作成した新スレッド完了を待機する。(暗黙的にスレッドjoinが行われる。)
C++11の仕様策定後、上記仕様を削除する案*1や「ブロッキング動作を明示するfuture型」の導入*2、async
関数ごと非推奨とする案*3などが提案されたが、破壊的な仕様変更案は全て退けられ最終的にC++14 DIS(N3937)では仕様変更されないことが確定した。同時に、async
関数とfuture
デストラクタの振る舞いが明記される。*4
関連URL
- C++14のドラフト仕様更新 - Faith and Brave - C++で遊ぼう
- ACCU 2013 and the C++ Standards Meeting | Just Software Solutions - Custom Software Development
- The View from Aristeia: Shared State from std::async remains special
- The View form the C++ Standard meeting April 2013 Part 3 (C/C++ Cafe)
- (PDF) N3776 Wording for ~future