如何将while循环的每一次迭代都分配给线程

How can i assign every iteration of this while loop to a thread?

本文关键字:迭代 一次 分配 线程 while 循环      更新时间:2023-10-16

这个while循环的响应时间很长,因此我尝试将它的每一次迭代都分配给一个线程,但我不知道是什么?请回答我:(

string tmp = fr.getNextWord();
while (tmp != "")
{
    hf << h->getHash(tmp) << endl;        
    ENFA * enfa = new ENFA();
    * enfa = generateNfaFromString("%s%a_l%a%m%");
    if (enfa->accepts(h->getHash(tmp), getHashChar))
    {
        of << "true" << endl;
    } else 
    {
        of << "false" << endl;
    }
    tmp = fr.getNextWord(); 
}
  1. 将循环的内容重新映射到一个单独的函数调用中
  2. 在循环之外创建一个线程对象的容器(最好包装在未来的对象中)
  3. 在循环中,创建一个调用函数的新线程。将线程对象(或关联的未来)存储在容器中
  4. (可选:挠头,想知道为什么响应时间变得更糟)

假设您可以将fr中的所有单词存储在std::vector中,则可以尝试使用openmp

std::vector<string> v;
//TODO: loop over `fr` and push_back the words onto `v`
# pragma omp parallel for
for (int i = 0; i < v.size(); ++i) {
    //use `v[i]` instead of `tmp` in your code
}