其他分享
首页 > 其他分享> > 关于TBB / C代码的问题

关于TBB / C代码的问题

作者:互联网

我正在阅读线程构建块书.我不明白这段代码:

            FibTask& a=*new(allocate_child()) FibTask(n-1,&x);
FibTask& b=*new(allocate_child()) FibTask(n-2,&y);

这些指令意味着什么?类对象引用和新工作在一起?谢谢你的解释.

以下代码是此类FibTask的定义.

class FibTask: public task

{
public:

 const long n;
    long* const sum;
 FibTask(long n_,long* sum_):n(n_),sum(sum_)
 {}
 task* execute()
 {
  if(n<CutOff)
  {
   *sum=SFib(n);
  }
  else
  {
   long x,y;

   FibTask& a=*new(allocate_child()) FibTask(n-1,&x);
   FibTask& b=*new(allocate_child()) FibTask(n-2,&y);
   set_ref_count(3);
   spawn(b);
   spawn_and_wait_for_all(a);
   *sum=x+y;
  }
  return 0;

 }
};

解决方法:

new(pointer) Type(arguments);

此语法称为placement new,它假定已经分配了位置指针,然后只在该位置调用Type的构造函数,并返回Type *值.

然后取消引用此类型*以提供类型&amp ;.

如果要使用自定义分配算法,则使用Placement new,如您正在阅读的代码(allocate_child())中所示.

标签:c,tbb
来源: https://codeday.me/bug/20190726/1546281.html