請看看下面的代碼執行:VC++論壇中的系列&不平行
ThreadX^ o1 = gcnew ThreadX(SS,x2,0,ss,x,xcores);
Thread^ t1 = gcnew Thread(gcnew ThreadStart(o1, &ThreadX::InitializeCvecArray));
t1->Name = "t1";
ThreadX^ o2 = gcnew ThreadX(SS2,x2,ss,ss,y,xcores);
Thread^ t2 = gcnew Thread(gcnew ThreadStart(o1, &ThreadX::InitializeCvecArray));
t2->Name = "t2";
t1->Start();
t2->Start();
的問題是,這些線程在一系列執行,第一線T1被執行,被執行那麼線程T2 。如果我在t2-> start()行之後退出main(而不調用Join());我只看到t1 &的輸出不是t2。這兩個線程是相互獨立的,他們讀取2或3個全局變量,就是這樣。
故事背景
我跑一些Cilk的加號(英特爾Cilk的)代碼,我注意到,在Cilk的程序所需要的時間等於由串行程序+ Cilk的開銷所花費的時間。所以我創建了這個簡單的線程應用程序,結果沒有改變。線程應用程序花費的時間等於串行程序+線程創建/等待開銷所花費的時間。我有一個AMD Athlon 64 X2系統(簡單的2個物理內核),使用Visual Studio 2010,Windows 7 Home Premium 64bit。我不知道除C/C++以外的其他語言。
額外的資訊
增加線程的優先級 「T2->優先級= ThreadPriority ::最高;」也沒有幫助。我想要做的是將一組文件與參考文件進行比較。爲了加快比較速度,我認爲如果我並行比較兩個或更多,這將是很好的,因此是多線程方法。
t2是*表示*是否在o1正確? – Will
我知道的愚蠢問題,但Win7確實在任務管理器中顯示了兩個可用的內核? –
Ahhh Tahnkyou Will&Will ... @ will:你剛纔提到它,t2是爲了o2而不是o1。有錯誤,正在將對象o1傳遞給兩者。 – SRUK