項的大小,我需要補矩陣(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
的元素大小未知,我可以想象遇到這種情況,原來分配給矩陣元素的內存是不夠的。然後會發生什麼?是否有可能多個線程(即填充不同矩陣條目的線程)嘗試使用相同的地址擴展分配的內存?