VC ++线程在串联和执行中执行不是平行的

时间:2011-12-01 05:56:30

标签: multithreading visual-studio-2010 visual-c++ c++-cli parallel-processing

请查看以下代码:

 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();

问题是这些线程是一系列执行的,首先执行Thread t1,然后执行线程t2。如果我在行t2-> start()之后退出main(不调用Join());我只看到t1&的输出不是t2。这两个线程彼此独立,它们读取2或3个全局变量,就是这样。

背景故事
我正在运行一些cilk plus(intel cilk)代码,我注意到cilk程序花费的时间等于串行程序+ cilk开销所花费的时间。所以我创建了这个简单的线程应用程序,结果没有改变。线程应用程序所花费的时间等于串行程序+线程创建/等待开销所花费的时间。我有一个AMD Athlon 64 X2系统(只有2个物理内核),使用Visual Studio 2010,Windows 7 Home Premium 64bit。我不懂任何其他语言而不是C / C ++。

额外信息
增加线程的优先级“t2-> Priority = ThreadPriority :: Highest;”也没有帮助。我想要做的是将一组文件与参考文件进行比较。为了使比较更快,我认为如果我并行比较两个或更多,那将是很好的,因此多线程方法。

1 个答案:

答案 0 :(得分:0)

正如将在评论中指出的那样,这条线是罪魁祸首:

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

o1应该是o2