C++ `为omp parallel firstprivate共享\u ptr`和深度拷贝`
我有一个目标是C++ `为omp parallel firstprivate共享\u ptr`和深度拷贝`,c++,multithreading,openmp,smart-pointers,C++,Multithreading,Openmp,Smart Pointers,我有一个目标是 多态性,因此需要通过指针(或变体)传递,但这似乎有些过分了 足够大且传递频率足够高,因此需要高效地传递(即,不进行不必要的复制) 不是线程安全的,因此当我们进入omp parallel部分时,需要为每个线程复制 有没有一种方法可以自动为这个对象声明适当的复制语义?我的想法是 制作我自己的包装器类,其中包含指向对象的指针,但进行深度复制(是否已经有这样的智能指针类?) 始终通过引用传递包装,这样它就不会在函数调用中被复制(如何检查我是否在某个地方意外地传递了值?) 将其声明为omp
omp parallel
部分时,需要为每个线程复制omp parallel
部分的firstprivate
,以便为每个线程复制它omp\u get\u thread\u num()
是否已更改,并根据需要执行指针或深度复制?我将使用一个来管理对象,并实现一个函数:
shared_ptr<T> deepCopy(const shared_ptr<T>& obj);
shared_ptr deepCopy(const shared_ptr&obj);
在请求时执行深度复制并返回另一个共享指针的。然后,可以在并行区域内使用此函数,在需要时实例化
obj
的私有副本。请向上投票,提醒我这太复杂了:)最后我选择了另一个选项scoped_ptr
处理非复制多态语义。在这里面有一个包装器,用于向对象添加线程安全性(将在另一个问题中发布)。因此,保留线程细节并从顶级算法中复制。另一个更新,一年后重新访问代码。如上所述,deepCopy
的问题是(我认为)它将在并行的每个迭代中调用一次,而每个线程只需要一次。因此,问题是将类包装在另一个具有深度复制语义的类中,将其传递到并行区域,然后在区域内展开它以进行浅层复制。