我有一个数字运算功能,所以我通过使用PPL并行它...所以另一个开发人员要求这个函数在串行运行因为某些原因..我需要给出一个参数,以便他可以调用我的函数在串行模式...我不想复制代码所以我需要一种方法来限制PPL线程的数量。虽然我很伤心
Concurrency::SchedulerPolicy sp( 1, Concurrency::MaxConcurrency, 1 );
CurrentScheduler::Create(sp);
PPL创建两个线程并并行运行我的代码...任何建议如何序列化ppl增强代码。
答案 0 :(得分: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 ) );