многопоточность — C ++ Как я могу запустить три разные функции parallel_for одновременно, кроме использования tbb :: task_group?

У меня есть код, где я должен параллельно запустить параллель для параллельной работы (независимо друг от друга).

Код это что-то вроде:

tbb::parallel_for(range1,func1());//first

tbb::parallel_for(range2,func2());//second

tbb::parallel_for(range3,func3());//third

Я попытался с помощью Task_group. Есть ли другой метод, доступный?

2

Решение

Есть много способов запустить любой параллельный алгоритм параллельно, вы просто хотите запустить его внутри другого параллельного алгоритма по вашему выбору. task_group это только один пример. Самый простой подход для вашего случая заключается в использовании parallel_invoke:

tbb::parallel_invoke([]{
tbb::parallel_for(range1,func1);//first
}, []{
tbb::parallel_for(range2,func2);//second
}, []{
tbb::parallel_for(range3,func3);//third
}
);

но один может выбрать другой parallel_for над массивом диапазонов и указателей на функции, или используйте parallel_pipeline, parallel_for_eachили сырой низкоуровневый tbb::task,

6

Другие решения

Вы можете поместить их каждый в одном станд :: нить и сделать присоединиться после этого. Смотрите также также.

1

По вопросам рекламы [email protected]