【发布时间】:2020-04-07 08:51:31
【问题描述】:
在我的程序中,我想从用户那里获取线程数。例如,用户输入线程数为 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::thread而不是pthread_t并且根本不使用指针。 -
您的
mythread-变量是您的for-loop 的本地变量,它不存在于它之外。 -
您还有未定义的行为:对于
i的任何值> 0mythread[i]超出范围。
标签: c++ multithreading c++11 pthreads pthread-join