4

このスニペットで 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)

4

2 に答える 2

10

次の起動ポリシーを追加する必要がある場合がありますstd::launch::async

std::async(std::launch::async, foo);
于 2012-11-17T16:32:37.023 に答える