gpt4 book ai didi

c++ - 如何在 OpenMP C++ 中分配动态内存

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:48:00 25 4
gpt4 key购买 nike

我尝试并行函数,分配内存,但我有一个坏堆异常。内存一定是一次性使用了一些线程。

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)可能不是线程安全的。你将不得不围绕这段代码组织一些守卫。像这样的东西:

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);

关于c++ - 如何在 OpenMP C++ 中分配动态内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34566545/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com