まずダメな例から。
#include <iostream> #include <vector> #include <future> using namespace std; int solve(vector<int> &x) { x[0] += 100; return x[0]; } int main(int argc, char **argv) { vector<int> v{1,2,3}; future<int> fut = async(launch::async, solve, v); cout << fut.get() << endl; cout << v[0] << endl; return 0; }上記のプログラムを実行すると、
101
1
と表示される。vector<int>
スレッドに参照渡しをする場合は、以下のようにrefを使って参照ラッパーを渡すようにしなければならない。
#include <iostream> #include <vector> #include <future> using namespace std; int solve(vector<int> &x) { x[0] += 100; return x[0]; } int main(int argc, char **argv) { vector<int> v{1,2,3}; future<int> fut = async(launch::async, solve, ref(v)); cout << fut.get() << endl; cout << v[0] << endl; return 0; }
実行結果は、
101
101
となる。
0 件のコメント:
コメントを投稿