0

請看看下面的代碼執行: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 ::最高;」也沒有幫助。我想要做的是將一組文件與參考文件進行比較。爲了加快比較速度,我認爲如果我並行比較兩個或更多,這將是很好的,因此是多線程方法。

+1

t2是*表示*是否在o1正確? – Will

+0

我知道的愚蠢問題,但Win7確實在任務管理器中顯示了兩個可用的內核? –

+0

Ahhh Tahnkyou Will&Will ... @ will:你剛纔提到它,t2是爲了o2而不是o1。有錯誤,正在將對象o1傳遞給兩者。 – SRUK

回答

0

這將在評論中指出,此行是罪魁禍首:

Thread^ t2 = gcnew Thread(gcnew ThreadStart(o1, &ThreadX::InitializeCvecArray)); 

o1應該是o2這裏。