首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将PPL线程数设置为1?

如何将PPL线程数设置为1?
EN

Stack Overflow用户
提问于 2012-07-23 23:36:17
回答 1查看 2.1K关注 0票数 1

我有一个数字处理函数,所以我使用PPL..however并行它另一个开发人员需要这个函数在串行运行由于某些原因..我需要给一个参数,以便他可以调用我的函数在串行模式...我不想重复代码,所以我需要一个方法来限制threads..Although的数量,我有一个悲哀

代码语言:javascript
复制
Concurrency::SchedulerPolicy sp( 1, Concurrency::MaxConcurrency, 1 );
CurrentScheduler::Create(sp);

PPL创建了两个线程,并在parallel...Any中运行我的代码,建议如何序列化ppl增强的代码。

EN

回答 1

Stack Overflow用户

发布于 2012-11-03 00:21:39

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

代码语言:javascript
复制
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。

代码语言:javascript
复制
CurrentScheduler::Create( SchedulerPolicy( 2, Concurrency::MinConcurrency, 1, Concurrency::MaxConcurrency, 1 ) );
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11615770

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档