草庐IT

threadprivate

全部标签

c++ - 如何在 OpenMP threadprivate 指令中使用对象的直接初始化?

关于this问题其中一个答案引用了OpenMP标准的以下部分:Athreadprivatevariablewithclasstypemusthave:anaccessible,unambiguousdefaultconstructorincaseofdefaultinitializationwithoutagiveninitializer;anaccessible,unambiguousconstructoracceptingthegivenargumentincaseofdirectinitialization;anaccessible,unambiguouscopyconstruc

c++ - OMP threadprivate 对象未被破坏

底线如何确保threadprivate实例被正确销毁?背景回答thisquestion时在VS2013中使用英特尔C++15.0编译器时,我遇到了一个奇怪的问题。当声明一个全局变量threadprivate时,从线程拷贝不会被破坏。我开始寻找强制销毁它们的方法。在this站点,他们说添加OMP屏障应该会有所帮助。它没有(见MCVE)。我尝试将OMP阻塞时间设置为0,这样线程就不会停留在并行区域之后(也没有帮助)。我尝试添加一些延迟主线程的虚拟计算,让其他线程有时间死掉。仍然没有帮助。MCVE:#include#includeclassmyclass{int_n;public:mycla

c++ - 在 C++ STL 类型的静态实例上使用 OpenMP threadprivate 指令

考虑以下片段:#includeclassA{staticstd::maptheMap;#pragmaompthreadprivate(theMap)};std::mapA::theMap;使用OpenMP编译失败并显示以下错误消息:$g++-fopenmp-cmain.cppmain.cpp:5:34:error:‘threadprivate’‘A::theMap’hasincompletetype我不明白这个。我可以在没有#pragma指令的情况下进行编译,这应该意味着std::map不是不完整。如果theMap是原始类型(double、int...),我也可以编译。如何创建全局静态

c++ - 如何在 OpenMP 中将对象或结构定义为 threadprivate?

我不知道如何使结构或对象成为线程私有(private)的,我正在做的事情会产生错误:structpoint2d{intx;inty;point2d(){x=0;y=0;}//copyconstructorpoint2d(point2d&p){x=p.x;y=p.y;}};我声明了一个静态结构并尝试使它们成为线程私有(private)的staticpoint2dmyPoint;#pragmaompthreadprivate(myPoint)它会产生一个错误:errorC3057:'myPoint':dynamicinitializationof'threadprivate'symbols

c++ - 声明自身 (*this) 私有(private)的类以避免竞争条件/放弃 gcc 中线程私有(private)的请求

我想避免并行代码中的竞争条件。问题是我的类包含几个全局变量,为了简单起见,我们只说一个x以及一个我希望并行的for循环。实际代码还有一个方法,它接受一个指向类的指针,在本例中是它本身,作为它的参数,访问更多的全局变量。因此,将整个实例设为threadprivate可能是有意义的。我正在使用OpenMP。一个最小的工作示例是:#include#includeclasslotswork{public:intx;intf[10];lotswork(inti=0){x=i;};voidaddInt(inty){x=x+y;}voidcarryout(){#pragmaompparallelfo