В настоящее время я работаю над ускорением одной из моих программ на 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 секунд).
Подводя итог: Если мой код неверен, что не так? Если это не так, в каком случае следует использовать многопоточность для ускорения вычислений?
Edit: я бегу на машине i7-4810MQ
Edit 2: вот что делает туРипсЫоп (он анализирует 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();
}
Да. Нет. Нет. Да. –
Вы не показываете, как вы делитесь своей работой между вашими потоками и как они сообщают свои зависимые результаты друг другу (если есть). – jxh
без реализации myFunction, трудно сказать. –