OpenMP中类成员变量的数据共享属性
Data-sharing attribute of class member variables in OpenMP
我很难并行处理一个程序。我有一个类Program
,它包含一些变量(例如opencv-Mat)和一个函数run
。
class Program {
Mat image;
...
void run( string inputFileName ) {
...
someFunctionInAnotherFile( image, ... ); // call by reference, image gets manipulated
}
...
};
int main( ) {
#pragma omp parallel default(none) shared(inputVector)
Program program;
#pragma omp for schedule(guided,1)
for( unsigned int inputNumber = 0; inputNumber < inputVector.size( ); ++inputNumber ) {
program.run( inputVector[ inputNumber ] );
}
}
变量program
应该是私有的,因为它是在parallel
区域内声明的,对吧?但是成员image
呢,它也会是私有的吗?我在openMP规范中找不到任何关于它的信息,只有关于动态存储变量的信息(但类成员是什么存储类?)run
本身调用一些其他.cpp文件中定义的函数。这些函数中的局部变量是私有的吗?我希望如此。
最大的问题是:存在竞赛条件,值得注意的是,多个程序执行之间的结果会发生变化。因此,要回答的问题应该是"在这个程序中,怎么会有任何导致种族的单一共享变量?">
非常感谢调查这个问题的任何帮助,如果需要,我也很乐意提供更多信息
EDIT:
我刚刚发现包含其他函数的文件包含全局变量。这会是个问题吗?我想是的。
我的问题确实是在其他文件中引入了全局变量。我最初的问题的答案是:
类成员变量将继承它们所属对象的数据共享属性。如果我做对了,这只适用于不使用new
进行类实例化的情况。
相关文章:
- 在cuda线程之间共享大量常量数据
- 在c代码之间共享数据的最佳方式
- C++/QT:使用指向私有成员的常量指针作为只读数据共享
- 线程之间的实时数据共享
- 共享 C++ 的数据成员指针
- DLL共享数据的推荐方式是什么
- C++实现相同接口的对象/类之间的数据共享
- C++ Visual Studio 解决方案的共享属性表(调试和发布)
- C++对象共享属性 - 使用指针或引用
- 线程之间类的静态数据共享
- OpenMP中类成员变量的数据共享属性
- 限制数据类型属性冲突-ODBC with Access Database
- 如何将复杂的指针数据作为属性放入qt-plugin-xml文件中
- 多个文件数据共享
- GL顶点数据的QThread数据共享方法
- 具有"与无人共享"属性的文件夹的 SQL 访问被拒绝错误
- c++ /Windows多线程同步/数据共享
- 按时间间隔分析音频数据的属性
- bhoc++标签之间的数据共享
- 按对象数据成员属性搜索对象的向量