项的大小,我需要补矩阵(std::vector< std::vector<T> >
)是已知的,已经使用vector::resize(...)
功能设置的行和列,其数量。在omp循环中填充已知大小的矩阵。未知
每个矩阵元素的对象都是class T
的对象,它们应该具有std::set<int>
作为其中的成员。没有办法事先知道这些设置的大小。
为了填补我的目标是使用一个循环像以下,其中m的矩阵,N是公知的数字:
std::vector<T> innerVector;
innerVector.resize(n, T());
std::vector< std::vector<T> > myMatrix;
myMatrix.resize(m, innerVector);
#pragma omp parallel for
for(size_t i = 0; i < myMatrix.size(); ++i)
{
for(size_t j = 0; j < myMatrix.at(0).size(); ++j)
{
fillMatrix(myMatrix, i, j);
}
}
的fillMatrix(...)
函数并只使用已知的信息来建立该组中包含的号码的每个矩阵元素,所以在那里没有数据依赖。
灌装这样我们就不会遇到造成多个线程同时访问一个矩阵元素比赛条件的矩阵。我的问题是,在不使用omp critical
环境的情况下调用fillMatrix(...)
函数是否安全。
关键是我不知道vector::resize(...)
功能是如何工作的。不知何故,它为myMatrix
分配了一些内存,但由于class T
的元素大小未知,我可以想象遇到这种情况,原来分配给矩阵元素的内存是不够的。然后会发生什么?是否有可能多个线程(即填充不同矩阵条目的线程)尝试使用相同的地址扩展分配的内存?