Ну, я смотрю вокруг, и я не совсем уверен, почему это происходит. Я видел много Tuts, связанных с использованием потоков в Linux, но не так много о том, чем я сейчас делюсь.
Код:
int j = 0;
while(j <= 10)
{
myThreads[j] = std::thread(task, j);
myThreads[j].join();
j+=1;
}
Поэтому я просто пытаюсь создать 10 потоков и выполнить их все.
Задача довольно проста, и она решена довольно хорошо, но проблема в том, что не все потоки выполняются.
На самом деле он выполняет только 1 поток и ждет, пока он завершит, затем выполняет другой поток и т. Д.
PS: я знаю, что основная функция будет завершена после активации этих потоков, но я читал об этом, и я уверен, что смогу это исправить разными способами.
Итак, я хочу выполнить все эти потоки одновременно и все.
Заранее большое спасибо,
MarioAda.
Вы начинаете темы, а затем присоединяетесь к ним прямо сейчас.
Вам нужно создавать, выполнять свою работу и только потом включаться в какой-то другой цикл.
Кроме того, вы обычно помещаете потоки в вектор, чтобы вы могли ссылаться на них / присоединяться к ним (что, кажется, делает, хотя в массиве, так как это помечено C ++, я рекомендую вам использовать vector
вместо).
Стратегия такая же, как с pthreads
перед этим: вы объявляете массив потоков, запускаете их, а затем присоединяетесь.
Код ниже взят из Вот.
#include <thread>
#include <iostream>
#include <vector>
void hello(){
std::cout << "Hello from thread " << std::this_thread::get_id() << std::endl;
}
int main(){
std::vector<std::thread> threads;
for(int i = 0; i < 5; ++i){
threads.push_back(std::thread(hello));
}
for(auto& thread : threads){
thread.join();
}
return 0;
}
Это потому что присоединиться блокирует текущий поток, пока ваш поток не закончится.
Вы должны запускать свои потоки только в том цикле, который у вас уже есть, и вызывать функцию join () потоков во втором цикле.