Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Параллельное выполнение задча


Автор: xTr1m 21.3.2011, 17:58
Доброго времени суток. У меня есть алгоритм, в нем три шага. Первые два могут выполняться независимо, тритий должен дождаться первых двух. Сейчас это все выполняется линейно, то есть сначала первый, потом второй и третий. Среда разработки MSVS 2008. Слышал, что в 2010 можно разбивать на задачи и выполнять параллельно на нескольких процессорах одновременно, но студию я сменить не могу. Насколько я понимаю, если просто создам два потока (на первый и второй шаг), то будет загружаться все равно только один процессор. Может есть что-нибудь в boost'е, к примеру. Очень буду благодарен за помощь.

Автор: KaraKum 21.3.2011, 18:25
Достаточно разбить на потоки. Параллельное выполнение каких-либо задач в прерогативу студии разработки не входит. Библиотек по потокам много, но лучше использовать http://www.boost.org/doc/libs/1_46_1/doc/html/thread.html. Любая реализация потоков имеет функцию .join(), позволяющую дождаться завершения выполнения потока - какая бы библиотека не была в результате код будет выглядеть примерно так:

Код

//задачи в виде функций:
void firstTask() {}
void secondTask() {}
void thirdTask() {}

int main()
{
     //запускаем первую задачу:
     AnyThreadType firstThread(firstTask);
     //...вторую:
     AnyThreadType secondThread(secondTask);
     
     //ждём завершения выполнения обеих задач:
     firstThread.join();
     secondThread.join();
     
     //ну и последняя задача уже в основном потоке:
     thirdTask();
}

Автор: xTr1m 21.3.2011, 18:50
Спасибо. Я думал что вынесение в поток не распределит нагрузку между процессорами, ошибался. Что же буду делать через потоки.

Автор: azesmcar 21.3.2011, 22:41
Цитата(xTr1m @  21.3.2011,  18:50 Найти цитируемый пост)
Спасибо. Я думал что вынесение в поток не распределит нагрузку между процессорами, ошибался. Что же буду делать через потоки.

Этим занимается операционная система. Если на данный момент потоков, требующих внимания процессора не больше самих процессоров, то каждый поток будет выполняться отдельным процессором. В основном, если система ничем другим не занята, то два потока будут выполняться параллельно на компьютере с двумя процессорами. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)