我目前正致力于加速我的一个c ++程序,并试图发现多线程的美丽世界。
std::vector<std::thread> threadPool;
threadPool.clear();
for(int t = 0; t < nbThreads; ++t){
threadPool.push_back(std::thread(myFunction, std::ref(rep), std::ref(branch1));
}
for(auto t = threadPool.begin(); t < threadPool.end() ; ++t){
t->join();
}
我不明白的是,无论使用多少线程,速度都不会改变! (约30秒)。
总结一下:如果我的代码错了,有什么问题?如果没有错,在什么情况下我应该使用多线程来加速计算?
编辑:我在i7-4810MQ机器上运行
编辑2:这是myFunction的作用(它解析xml文件)
void myfunction(DIR*& rep, struct dirent*& branch1){
mtx.lock();
while ((branch1 = readdir(rep)) != NULL){
mtx.unlock()
TiXmlDocument doc(branch1->d_name);
if(doc.LoadFile()){
//parse file
}
mtx.lock();
}
mtx.unlock();
}
答案 0 :(得分:2)
您的代码很可能受到文件I / O的限制。您的XML解析器很可能会进行大量内存分配,如果许多线程同时分配内存,内存分配可能会变慢。