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

时间:2016-05-02 14:49:36

标签: c++ multithreading loops

这个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(); 
}

2 个答案:

答案 0 :(得分:0)

假设您可以将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
}

答案 1 :(得分:0)

  1. 将循环内容重构为单独的函数调用。
  2. 在循环外部创建一个线程对象容器(最好包含在将来的对象中)。
  3. 在循环中,创建一个调用该函数的新线程。将线程对象(或关联的将来)存储在容器中。
  4. (可选:抓挠你的脑袋,想知道为什么响应时间变得更糟)