对于unordered_map〈string,string〉中的每一对,我需要调用处理函数。它不返回任何东西,也不以任何方式更改数据。如何使用std::async或std::thread异步处理map部分?
我本来想做这样的事
unordered_map<string, string> m = Init();
vector<std::thread> threads;
for (size_t i = std::thread::hardware_concurrency(); i > 0; --i) {
// for loop ???
threads.emplace_back(do_smth, it); // Here it is iterator of element in m
}
while (!threads.empty()) {
if (threads.back().joinable()) {
threads.back().join();
}
threads.pop_back();
}
但是应该用什么来代替// for循环呢???
2条答案
按热度按时间gcmastyq1#
作为第一步,我会创建:
主线程将把项目推到队列中。其他线程将执行以下操作:
在你把所有的真实的项都推到队列中之后,你可以(有一种可能性)推N(=线程数)个虚拟项。尝试弹出一个虚拟项返回
false
。gjmwrych2#
你没有说明你的项目使用的是哪种c标准。但是如果你至少有c17,这个问题很容易通过使用std库来解决(但是没有std::async或std::thread,如果这对你来说不是一个硬性要求的话):
您可以看到此解决方案的实际应用here。