运行线程池而不是手动创建线程来传递函数中的块



我是C++的新手,正在尝试实现一个线程池来划分任务并更快地运行它们。

这就是我目前所拥有的:

int main()
{
string str = " *some very long string* ";
int seg = str.length() / 4;
string dataSeg1 = str.substr(0, seg);
string dataSeg2 = str.substr(seg, seg);
string dataSeg3 = str.substr(seg * 2, seg);
string dataSeg4 = str.substr(seg * 3, -1);
std::thread first(getCount, dataSeg1);
std::thread second(getCount, dataSeg2);
std::thread third(getCount, dataSeg3);
std::thread fourth(getCount, dataSeg4);
first.join();
second.join();
third.join();
fourth.join();
for (auto x : result)
{
cout << x.first << " : " << x.second << "n";
}
return 0;
}

我有另一个void函数getCount,它将长字符串中出现的字母的频率计数附加到全局映射result

有没有像python3中那样的线程池可以在C++中更优雅地做到这一点?因为我认为这种手动线程初始化可以动态编写。

这样,如果segments=7在开始时的某个地方被初始化,那么应该有7个数据段和7个线程在运行。

非官方库中没有线程池,但您可以在github中找到它们,例如https://github.com/progschj/ThreadPool

最新更新