Я пытаюсь заполнить огромный двойной вектор (1929x1341, может даже увеличиться) с данными, которые сейчас занимают около 10 секунд.Заполнение вектора в порядке с использованием потоков в C++
для справки, это код до сих пор:
vector<vector<float>> vector1;
for (int x = 0; x < mapWidth; x++) {
vector<float> vector2;
for (int y = 0; y < mapHeight; y++) {
int someNumber = calculateNumber(x,y);
vector2.push_back(someNumber);
}
vector1.push_back(vector2);
}
Я думаю, что я должен быть в состоянии сократить рабочее время пути деления работы над отдельными потоками. В частности, я мог бы отделить второй цикл for в каждом своем потоке.
К сожалению, я не очень хорошо разбираюсь с темами. Основная проблема заключается в том, что векторы необходимо заполнять в порядке. Поэтому я не могу просто отделить второй вектор от своих собственных потоков и объединить их позже, поскольку это поставит их в полуслучайный порядок. Я просмотрел мьютекс и переменные условий, но я не могу найти хорошее решение этой конкретной проблемы.
Может кто-нибудь захочет помочь мне здесь?
Вы объединить их в том же порядке, что вы посылаете их на другие потоки в, а не как они Конец. – user2296177
«Поэтому я не могу просто отделить второй вектор от своих собственных потоков и объединить их позже» - да, вы можете. Просто дайте потоку индекс (или ссылку), где в первом векторе он может поместить его результаты. – lorro
Было бы полезно использовать 'std :: vector :: reserve', чтобы зарезервировать память – Galik