【发布时间】:2011-05-11 15:11:08
【问题描述】:
我有两个功能,它曾经对我有用,我对代码做了一些更改,但我不知道发生了什么。当我将这些函数作为多线程执行时,CPU 为 10-30%,而且速度非常慢。它只是逐行读取文件,然后使用 boost token 解析 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);
}
....................
....................
有人可以帮忙吗?我的想法不多了。谢谢。
【问题讨论】:
-
那是共享向量吗:mystr?
-
你正在解析同一个文件:tracefilenameUL ???
-
如果我在 while 循环之前使用 mutex.lock 并在文件完成后使用 mutex.unlock(),那么它会变得更快但不是真正的多线程。
-
我正在使用 VS 2010,我需要对项目设置做任何事情吗?我想我做了一些更改,但不确定是否会导致问题
-
是在您将代码更改为使用多线程之后发生了减速,还是曾经使用多线程运行得足够快,但您更改了代码中的其他内容并使其变慢?
标签: c++ multithreading boost-thread