Как мне создать различное количество потоков в C ++? - PullRequest
1 голос
/ 07 апреля 2020

В моей программе я хочу получить количество потоков от пользователя. Например, пользователь вводит количество потоков как 5, я хочу создать 5 потоков. Это нужно только в начале программы. Мне не нужно менять количество потоков во время программы. Итак, я пишу код, такой как;

int numberOfThread;

cout << "Enter number of threads: " ;
cin >> numberOfThread;

for(int i = 0; i < numberOfThread; i++)
{
    pthread_t* mythread = new pthread_t;
    pthread_create(&mythread[i],NULL, myThreadFunction, NULL);
}

for(int i = 0; i < numberOfThread; i++)
{
    pthread_join(mythread[i], NULL);
}

return 0;

, но у меня есть ошибка в этой строке pthread_join (mythread [i], NULL);

error: «Мифред» не был объявлен в этой области.

Что не так в этом коде? и у вас есть идея лучше создать пользовательский номер потока?

1 Ответ

1 голос
/ 07 апреля 2020

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

Я предлагаю вам следующее: создайте std::vector из std::thread s (так, не используйте pthread_t вообще), и тогда вы можете получить что-то вроде:

std::vector<std::thread> threads;
for (std::size_t i = 0; i < numberOfThread; i++) {
    threads.emplace_back(myThreadFunction, 1);
}

for (auto& thread : threads) {
    thread.join();
}

, если ваш myThreadFunction выглядит так:

void myThreadFunction(int n) {
    std::cout << n << std::endl; // output: 1, from several different threads
}
...