Microsoft PPL parallel_for_each with boost filesystem directory_iterator

时间:2011-09-07 19:19:43

标签: c++ visual-studio-2010 boost c++11

使用Visual Studio 2010 SP1

所以我有一个std :: for_each使用boost :: filesystem库迭代大量文件。 因为那些迭代不会互相混淆我试图让多线程工作,所以我试图使用VS 2010库PPL。

old:for_each(directory_iterator(path), directory_iterator(), <lambda function>); 新:parallel_for_each(directory_iterator(path), directory_iterator(), <lambda function>);

事情是,parallel_for_each没有编译,因为它要求一个随机访问迭代器或一个前向访问迭代器,我假设directory_iterator不是。 有没有办法让directory_iterator在这种情况下工作?也许有一个不同的迭代器,我不知道或可能是某种演员?

试图在网上搜索答案,但PPL与提升并没有真正谈论过。

提前感谢。

1 个答案:

答案 0 :(得分:1)

如果您花费大部分时间来加载文件,那么您只是通过尝试加载多个文件来减慢速度。也就是说,如果你的工作受到处理限制,你可以这样做:

for each file // serial
{
    load file into memory
    spawn task to process file // concurrent
}

wait until tasks to complete

为此,您需要使用tasks