VC ++ Потоки, выполняющиеся в серии, а не в параллели - PullRequest
0 голосов
/ 01 декабря 2011

Пожалуйста, взгляните на следующий код:

 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.Если я выйду из main (без вызова Join ()) после строки t2-> start ();Я вижу только вывод из t1, а не из t2.Эти два потока не зависят друг от друга, они читают 2 или 3 глобальные переменные и все.

Background Story
Я запускал некоторый код cilk plus (intel cilk) и заметил, что время, затрачиваемое программой cilk, было равно времени, затрачиваемому последовательной программой +над головой.Поэтому я создал это простое многопоточное приложение, и результаты не изменились.Время, затраченное многопоточным приложением, равно времени, затрачиваемому последовательной программой + создание потока / накладные расходы на ожидание.У меня есть система AMD Athlon 64 X2 (просто 2 физических ядра), использующая Visual Studio 2010, Windows 7 Home Premium 64bit.Я не знаю другого языка, кроме C / C ++.

Дополнительная информация
Увеличение приоритета потоков "t2-> Priority = ThreadPriority :: Highest;"тоже не помогло.Что я хочу сделать, это сравнить набор файлов с эталонным.Чтобы ускорить сравнение, я подумал, что было бы хорошо, если бы я сравнивал два или более параллельно, отсюда и многопоточный подход.

1 Ответ

0 голосов
/ 01 декабря 2011

Как отметил Уилл в комментариях, эта строка является виновником:

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

o1 должно быть o2 здесь.

...