簡體   English   中英

如何在OpenMP C ++中分配動態內存

[英]How allocate dynamic memory in OpenMP C++

我嘗試並行化功能,該功能分配內存,但是我有一個壞堆的例外。 內存必須一次使用一些線程。

void GetDoubleParameters( CInd *ci )
{
    for(int i=0;i<ci->size();i++)
    {
        void *tmp;
        #pragma omp parallel private (tmp)
        {
            for(int j=0;j<ci[i].getValues().size();j++)
            {
                tmp = (void*)new double(ci[i].getValues()[j]);
                ci->getParameters().push_back(tmp);
            }
        }

    }
}

問題是這一行:

ci->getParameters().push_back(tmp);

ci被所有並行線程一次訪問,並且帶有push_back例程(可能是std :: vector)的parameter元素可能不是線程安全的。 您將必須圍繞此代碼組織一些防護措施。 就像是:

omp_lock_t my_lock;
...
// initialize lock
omp_init_lock (&my_lock);
...

// do something sensible in parallel
  ...
  {
      omp_guard my_guard (my_lock);
      // protected region starts here
      // only one thread at a time works here
  }
  // more parallel work
  ...
}
omp_destroy_lock (&my_lock);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM