многопоточность — одновременные потоки в C ++ с использованием & lt; thread & gt;

Ну, я смотрю вокруг, и я не совсем уверен, почему это происходит. Я видел много Tuts, связанных с использованием потоков в Linux, но не так много о том, чем я сейчас делюсь.

Код:

int j = 0;
while(j <= 10)
{
myThreads[j] = std::thread(task, j);
myThreads[j].join();
j+=1;
}

Поэтому я просто пытаюсь создать 10 потоков и выполнить их все.
Задача довольно проста, и она решена довольно хорошо, но проблема в том, что не все потоки выполняются.

На самом деле он выполняет только 1 поток и ждет, пока он завершит, затем выполняет другой поток и т. Д.

PS: я знаю, что основная функция будет завершена после активации этих потоков, но я читал об этом, и я уверен, что смогу это исправить разными способами.

Итак, я хочу выполнить все эти потоки одновременно и все.

Заранее большое спасибо,
MarioAda.

2

Решение

Вы начинаете темы, а затем присоединяетесь к ним прямо сейчас.
Вам нужно создавать, выполнять свою работу и только потом включаться в какой-то другой цикл.
Кроме того, вы обычно помещаете потоки в вектор, чтобы вы могли ссылаться на них / присоединяться к ним (что, кажется, делает, хотя в массиве, так как это помечено 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;
}
11

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

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

2

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