我一直在尋找的C++ 0x線程,並有這樣的代碼:線程函數啓動緩慢
#include <vector>
#include <iostream>
#include <thread>
void TestFunc(const vector<int>& vVec)
{
cout << "in"<<endl;
}
int main()
{
int sizer = 400000000;
vector<int> vTest(sizer);
for(int f=0; f<sizer; f++)
vTest[f] = f;
cout << "V created." << endl;
thread one(TestFunc, vTest);
one.join();
}
正如你可以看到它只是傳遞一個向量的線程。 我不明白的是在出現「V created」消息後出現暫停。最初這(我假設)是被複制用於該函數的向量。 爲了制止這一點,我通過引用傳遞,但這沒有什麼區別。
延遲似乎是正比於這表明它仍復制(或做一些與陣列)的向量的大小。 如果我嘗試沒有線程的同一個實驗,只是直接調用函數,那麼當傳遞值的時候會有延遲,但是當我按照預期通過引用傳遞的時候不會。
我嘗試使用Boost線程而不是C++ 0x中相同(雖然我讀過他們很多是相同的),得到了相同的結果。
是有一些原因的行爲或有我錯過了什麼言自明? 謝謝。
不好意思,貼錯了測試代碼。糾正。 編輯:添加包括按要求。
編譯時: 克++ 44 -std =的C++ 0x -lpthread tester.cpp -o測試 ...正如我GNU 4.4沿側安裝附帶我的Linux標準的GNU編譯器(CentOS的),它不支持C++ 11。
TestFunc的最昂貴的部分是走線,而不是參數傳遞。似乎C++ 0x不支持創建線程 – BruceAdi
@Mahesh:在什麼系統上?這隻有4億美元,並且會很適合32位整數。 –
@BruceAdi:在C++中,11個線程是由標準強制的,並且至少gcc-4.6支持它們,並且它們工作 - 我每天都在使用它們。 – hirschhornsalz