如何在c++中创建不同数量的线程



在我的程序中,我想从用户那里获得线程数。例如,用户输入线程数为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(

错误:未在此作用域中声明"mythread"。

这个代码出了什么问题?你有更好的想法来创建用户定义的线程数量吗?

首先,创建线程时会出现内存泄漏,因为您分配了内存,但随后丢失了对它的引用。

我建议你如下:创建一个std::threads的std::vector(所以,根本不要使用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
}

最新更新