2014-06-14 45 views
2

那麼我一直在環顧四周,我不確定爲什麼會發生這種情況。我見過很多與在Linux上使用線程有關的Tuts,但我現在正在分享的內容並不多。C++中的同時線程使用<thread>

代碼:

int j = 0; 
while(j <= 10) 
{ 
    myThreads[j] = std::thread(task, j); 
    myThreads[j].join(); 
    j+=1; 
} 

所以我只是想創建10個線程,並執行它們。 這個任務非常簡單,處理得相當好,但問題在於不是整個線程正在執行。

它實際上只執行1個線程,它在等待它完成,然後執行另外一個等...

PS:我知道,主要功能將退出啓動這些線程,但我之後閱讀關於這一點,我相信我可以用多種方式解決它。

所以我想同時執行所有這些線程,就是這樣。

非常感謝, MarioAda。

+3

您正在重複啓動一個,然後等待它完成(加入)。你如何期望並行運行多於兩個線程? –

+2

旁註:您實際上正在創建11個線程0..10 –

+0

將其設置爲12,因爲每個進程至少有一個線程。 ;) –

回答

10

您正在啓動線程,然後立即加入它們。 您需要創建,完成您的工作,然後才能加入其他循環。 此外,你通常把線程放在一個向量中,所以你可以引用/加入它們(雖然在一個數組中,因爲它被標記爲C++,所以我鼓勵你改用vector)。

該策略與之前的pthreads相同:您聲明一個線程數組,然後推送它們運行,然後加入。

以下代碼來自here

#include <thread> 
#include <iostream> 
#include <vector> 

void hello(){ 
    std::cout << "Hello from thread " << std::this_thread::get_id() << std::endl; 
} 

int main(){ 
    std::vector<std::thread> threads; 

    for(int i = 0; i < 5; ++i){ 
     threads.push_back(std::thread(hello)); 
    } 

    for(auto& thread : threads){ 
     thread.join(); 
    } 

    return 0; 
} 
+0

它已經有一段時間了,我忘了謝謝你。無論如何,在這裏,你的幫助表示感謝。 – MarioAda

2

這是因爲join阻塞當前線程,直到你的線程完成。 您應該只在已有的循環中啓動線程,然後在第二個循環中調用線程的join()函數。