2012-11-17 66 views
4

使用C++ 11的std ::異步在這個片斷:的std ::異步不併行任務

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)

+0

請注意,即使G ++支持async'的'語法,它的實現相當不成熟(與MSVC相比)。 –

+0

哦,我明白了......所以答案是,現在是模擬執行? – Cartesius00

+7

[沒有啓動策略的std :: async允許運行時庫選擇是啓動新線程,還是在將來調用get()或wait()的線程中運行任務。](http://stackoverflow.com/a/12510731/179910) –

回答

10

您可能需要添加launch policystd::launch::async的:

std::async(std::launch::async, foo); 
+0

我總是喜歡簡單的解決方案。奇蹟般有效。 – Cartesius00