【发布时间】:2014-01-28 15:09:49
【问题描述】:
我有一个对象
- 多态,因此需要通过指针传递(或变体,但这似乎有点矫枉过正)
- 足够大并且足够频繁地传递,以至于需要有效传递(即不要不必要地复制)
- 不是线程安全的,因此当我们进入
omp parallel部分时需要为每个线程复制
有没有一种方法可以自动为该对象声明适当的复制语义?我的想法是
- 制作我自己的包装类,它包含一个指向对象的指针,但会进行深度复制(是否已经有这样的智能指针类?)
- 始终通过引用传递包装器,因此它不会在函数调用中被复制(我如何检查我没有意外地在某处按值传递?)
- 在
omp parallel部分将其声明为firstprivate,以便确实为每个线程复制
这合理吗?有没有更好的办法?
编辑:检查omp_get_thread_num() 是否已更改并酌情执行指针或深度复制的复制构造函数怎么样?
【问题讨论】:
标签: c++ multithreading openmp smart-pointers