このスニペットで C++11 std::async を使用する:
int foo()
{
::sleep(2);
return 123;
}
int main()
{
future<int> r1(async(foo));
int r2 = foo();
cout << r1.get() + r2 << endl;
return 0;
}
正しい結果が得られますが、両方の foo が連続して実行されます (アプリ全体が 4 秒間実行されます)。コンパイル:
g++ -std=gnu++11 -O2 foo.cc -lpthread
(Ubuntu 12.10 64 ビット、gcc 4.7.2)