c ++ Boost Multithread Running Медленно, когда два потока читают файл и токенизируют файл CSV - PullRequest
1 голос
/ 11 мая 2011

У меня есть две функции, раньше у меня это работало, я сделал некоторые изменения в кодах, но я не знаю, что случилось.Когда я выполнял эти функции в виде многопоточности, загрузка процессора составляла 10-30%, и это было очень медленно.Он просто читает файл за строкой, а затем анализирует строку CSV, используя маркер повышения.

        boost::thread OffLineUL(&AvaTTi::AvaCollectTTiAdvance::UeAndCellParamParseUL,c,tracefilenameUL.c_str(),NumOfLines,GHOSTFILTER,"","/",OffLineMode,OPENEXCELAUTO);
        boost::thread OffLineDL(&AvaTTi::AvaCollectTTiAdvance::UeAndCellParamParseDL,c,tracefilenameDL.c_str(), NumOfLines,"","/",OffLineMode,OPENEXCELAUTO);
        OffLineDL.join();
        OffLineUL.join();


    int AvaCollectTTiAdvance::UeAndCellParamParseDL(const char *inname, int NumOfRecords, const char *UserDir, const char* CurrentDir, int OffLineMode, int OPENEXCELAUTO)
    {
       typedef boost::tokenizer <boost::escaped_list_separator<char> > my_tokenizer;
       vector <string> mystr;


      std::ifstream infile(TTiAsciiTraceOutputUserDir.str(),std::ios::in);
      while (getline(infile, line)  && lineCount <= NumOfRecords)

      for (my_tokenizer::iterator it(tok.begin()), end(tok.end()); it != end; ++it)
      { 
        mystr.push_back(*it);
      }
      ....................
      ....................

Может кто-нибудь помочь, пожалуйста?У меня заканчиваются идеи.Спасибо.

1 Ответ

0 голосов
/ 11 мая 2011

Если у вас есть общие ресурсы среди ваших потоков, например, вектор mystr, вам нужно использовать механизмы синхронизации потоков для доступа к этим ресурсам, иначе ваш вектор будет поврежден.

Это верно для любой переменной, к которой будет обращаться из нескольких потоков одновременно, если они записываются хотя бы в один поток.

Я не могу сказать, в чем проблема, как выне предоставляя достаточного количества данных, я не могу понять из вашего кода, какие переменные являются локальными, а какие нет, а какие используются только одним или несколькими потоками.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...