1

我有一个数字运算功能,所以我使用 PPL 将其并行化。但是由于某种原因,另一个开发人员要求此函数串行运行。我需要提供一个参数,以便他可以在串行模式下调用我的函数...我不想复制代码,所以我需要一种方法来限制 PPL 线程的数量..虽然我很难过

Concurrency::SchedulerPolicy sp( 1, Concurrency::MaxConcurrency, 1 );
CurrentScheduler::Create(sp);

PPL 创建两个线程并并行运行我的代码...关于如何序列化 ppl 增强代码的任何建议。

4

1 回答 1

1

对于这个问题最好不要设置调度器策略,而使用一些手动的任务组初始化控制,例如:

using namespace Concurrency;

std::vector< task_handle< std::function< void() > > > aTask;
aTask.push_back( make_task([](){ /*taks 1*/}) );
aTask.push_back( make_task([](){ /*taks 2*/}) );
aTask.push_back( make_task([](){ /*taks 3*/}) );

task_group tGroup;

bool bSerialMode = true; /* or false */
if (!bSerialMode)
{
    std::for_each(aTask.begin(), aTask.end(), [&](task_handle< std::function< void() > >& handle){
       tGroup.run( handle );
    });
}
else
{
    tGroup.run( [&](){
      std::for_each(aTask.begin(), aTask.end(), [&](task_handle< std::function< void() > >& handle){
       tGroup.run_and_wait( handle ); });
    });
}

如果您决定限制一个虚拟处理器的所有任务,那么也要设置 MinConcurrency。

CurrentScheduler::Create( SchedulerPolicy( 2, Concurrency::MinConcurrency, 1, Concurrency::MaxConcurrency, 1 ) );
于 2012-11-02T16:21:38.770 回答