您可以通过包分割你的主题:如果你有5个线程和11个阵列,那么你将处理5个,5个和1个线程。 这是一个示例代码。
我没有文件,我在运行中生成的数据,但该部分从分拣部分分离,不会产生混淆
#include <random>
#include <vector>
#include <iostream>
#include <thread>
#include <algorithm>
using namespace std;
int generateData(vector<vector<int>>& vData)
{
std::random_device rd;
std::mt19937 gen(rd());
std::uniform_int_distribution<> dis(1, 1000000);
const int nbElemsPerVec=1000000;
int nbArray;
cout<<"How many arrays" << endl;
cin >> nbArray;
for (int i=0;i<nbArray;++i)
{
vector<int> vArr;
for (int j=0; j<nbElemsPerVec; ++j)
{
vArr.push_back(dis(gen));
}
vData.push_back(vArr);
}
return 0;
}
int sortData(vector<vector<int>>& vData, int nbThreads)
{
vector<thread> vThreads;
int nbArray=vData.size();
int nbArrayPerThread=nbArray/nbThreads+1;
for (int i=0;i<nbThreads;++i)
{
vThreads.push_back(
std::thread ([i, nbArrayPerThread,nbArray,&vData]{
for (int j=0;j<nbArrayPerThread;++j)
{
if (i*nbArrayPerThread+j < nbArray)//to avoid out of bounds exception
{
std::sort(vData[i*nbArrayPerThread+j].begin(),(vData[i*nbArrayPerThread+j].end()));
}
}
})
);
}
for (auto it=vThreads.begin(); it!=vThreads.end();++it)
{
it->join();
}
return 0;
}
int main()
{
int nbArray,nbThreads;
vector<vector<int>> vAllData;//array of vectors to be sorted out
generateData(vAllData);
nbArray=vAllData.size();
cout <<"How many threads"<<endl;
cin>>nbThreads;
nbThreads=min(nbThreads,nbArray);
sortData(vAllData,nbThreads);
return 0;
}
希望帮助,问我,如果您有任何问题(我可以详细说明一些部分)
究竟是什么'ArrayToBeSort :: startASM',你有什么特别的问题?在填充之前你调整了'listOfThreads'的大小? –
你可以参考http://stackoverflow.com/questions/17961899/thread-pool-and-execution-queue-in-c11查看线程池。 – timrau
startASM do:打开带有数字的文件,将其加载到数组中并使用汇编程序编写的DLL对其进行排序。 vector listOfThreads(amountOfThreads); –
user3027386