我写了一个简单的代码,它应该创建1000个线程,做一些工作,加入它们,然后重放1000次。
我有这段代码的内存泄漏,我不明白为什么。我一直在寻找解决方案,无处不在。
#include <iostream>
#include <thread>
#include <string>
#include <windows.h>
#define NUM_THREADS 1000
std::thread t[NUM_THREADS];
using namespace std;
//This function will be called from a threads
void checkString(string str)
{
//some stuff to do
}
void START_THREADS(string text)
{
//Launch a group of threads
for (int i = 0; i < NUM_THREADS; i++)
{
t[i] = std::thread(checkString, text);
}
//Join the threads with the main thread
for (int i = 0; i < NUM_THREADS; i++) {
if (t[i].joinable())
{
t[i].join();
}
}
system("cls");
}
int main()
{
for(int i = 0; i < 1000; i++)
{
system("cls");
cout << i << "/1000" << endl;
START_THREADS("anything");
}
cout << "Launched from the main\n";
return 0;
}
答案 0 :(得分:3)
我不确定内存泄漏,但你肯定有内存错误。你不应该这样做:
delete &t[i];
t[i]
未与new
分配,且不能delete
d。您可以安全地删除该行。
至于内存消耗,你需要问问自己是否真的需要产生100万个线程。产生线程并不便宜,并且您的平台不太可能同时运行多个线程。