编辑:我可以同时运行同一个程序两次,没有任何问题 - 我如何使用 OpenMP 或其他方法复制它?
这是问题的基本框架。
//Defined elsewhere
class SomeClass
{
public:
void Function()
{
// Allocate some memory
float *Data;
Data = new float[1024];
// Declare a struct which will be used by functions defined in the DLL
SomeStruct Obj;
Obj = MemAllocFunctionInDLL(Obj);
// Call it
FunctionDefinedInDLL(Data,Obj);
// Clean up
MemDeallocFunctionInDLL(Obj);
delete [] Data;
}
}
void Bar()
{
#pragma omp parallel for
for(int j = 0;j<10;++j)
{
SomeClass X;
X.Function();
}
}
我已经验证,当尝试通过 释放一些内存时MemDeallocFunctionInDLL()
,_CrtIsValidHeapPointer()
断言失败。
这是因为两个线程都在写入同一个内存吗?
所以为了解决这个问题,我想我会SomeClass
保密(这对我来说完全陌生,所以感谢任何帮助)。
void Bar()
{
SomeClass X;
#pragma omp parallel for default(shared) private(X)
for(int j = 0;j<10;++j)
{
X.Function();
}
}
现在,当它尝试在开始时为Data
.
注意:如果需要,我可以更改 DLL
注意:它可以完美运行,无需#pragma omp parallel for
编辑:现在Bar
看起来像这样:
void Bar()
{
int j
#pragma omp parallel for default(none) private(j)
for(j = 0;j<10;++j)
{
SomeClass X;
X.Function();
}
}
仍然没有运气。