Chinaunix首页 | 论坛 | 博客
  • 博客访问: 449106
  • 博文数量: 143
  • 博客积分: 6159
  • 博客等级: 准将
  • 技术积分: 1667
  • 用 户 组: 普通用户
  • 注册时间: 2010-08-25 23:08
文章分类

全部博文(143)

文章存档

2013年(1)

2012年(11)

2011年(55)

2010年(76)

分类:

2010-11-27 10:37:22

第六课:parallel_do
前面介绍的方法都是针对于固定的dataset,在整个处理过程中dataset没有变化,所以可以利用Range来作spliter进行任务分解,但是,现实总是意料之外的。这里我们介绍parallel_do,是基于iterator的并行化方法,并且在处理过程中可以动态添加dataset里面的内容。

class Body {
public:
    Body() {}

    void operator(arg_type x, parallel_do_feeder<arg_type>& feeder) const {
        foo(x);
        if (need successor) {
            feeder.add(get_successor());
        }
    }
};

parallel_do(data_set.begin(); data_set.end(), Body());


parallel_do的定义如下:

template<typename Body, typename Item>
class parallel_do_feeder_imple : public parallel_do_feeder<Item> {
    void internal_add (const Item& item) {
        ... new iteration_type t <--- item
        ... task.spawn(t);
    }
}


阅读(853) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~