スレッド間のデータのやり取りにstd::vector<t>は向かない 5年近く前のアーティクル:『C++11:スレッド・ライブラリひとめぐり』で、10万未満の素数の総数を求めるサンプルを示しました。これをベースに、素数の個数を求めるだけでなく、見つけた素数:int pを引数に関数オブジェクトf(int)を呼ぶよう少しばかり手を加えます。関数オブジェクト内でstd::vector<int<>に見つけた素数pを追加(push_back(p))します。シングルスレッドだとこんなコードになりますか。 #ifndef PRIME_H_ #define PRIME_H_ #include <mutex> #include <functional> #include <cmath> // nは素数? inline bool is_prime(int n) { int sqn = (int)sqrt((f