gpt4 book ai didi

c++ - `shared_ptr` 和 `omp parallel firstprivate` 的深拷贝

转载 作者:行者123 更新时间:2023-11-30 04:09:13 27 4
gpt4 key购买 nike

我有一个对象是

  1. 多态性,因此需要通过指针传递(或变体,但这似乎有点矫枉过正)
  2. 足够大且传递足够频繁,因此需要有效传递(即不会被不必要地复制)
  3. 不是线程安全的,所以当我们进入 omp parallel 部分时需要为每个线程复制

有没有一种方法可以自动为此对象声明适当的复制语义?我的想法是

  1. 制作我自己的包装器类,其中包含指向对象的指针但进行深拷贝(是否已经有一个行为类似的智能指针类?)
  2. 始终通过引用传递包装器,这样它不会在函数调用中被复制(我如何检查我没有不小心在某处通过值传递?)
  3. omp parallel 部分将其声明为 firstprivate,以便它确实为每个线程复制

这合理吗?有没有更好的办法?

编辑:检查 omp_get_thread_num() 是否已更改并根据需要执行指针或深度复制的复制构造函数怎么样?

最佳答案

我会使用 shared_ptr管理对象,实现功能:

shared_ptr<T> deepCopy(const shared_ptr<T>& obj);

根据请求执行深度复制并返回另一个共享指针。然后可以在并行区域内使用此函数,以在需要时实例化 obj 的私有(private)拷贝。

关于c++ - `shared_ptr` 和 `omp parallel firstprivate` 的深拷贝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21409331/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com