1
我有一個對象,它是`shared_ptr`與`OMP平行深層副本firstprivate`
- 多態性,因此需要由指針被傳遞(或變體,但似乎像矯枉過正)
- 足夠大,並通過周圍經常不夠,它需要被有效地傳遞(即不復制不必要的)
- 不是線程安全的,所以需要當我們進入一個
omp parallel
部分被複製爲每個線程
有沒有一種方法可以自動爲這個對象聲明適當的複製語義?我的想法是
- 創建包含一個指向對象,但不深拷貝我自己的包裝類(有一個行爲像這已經是一個智能指針類?)
- 總是按引用傳遞包裝所以不得到函數調用拷貝(我怎麼查我沒有不小心按值傳遞的地方?)
- 宣佈作爲
firstprivate
爲omp parallel
部分,因此它確實獲取複製每個線程
這是明智的嗎?有沒有更好的辦法?
編輯:複製構造函數如何檢查omp_get_thread_num()
是否已更改並根據需要執行指針或深度複製?
有一個upvote提醒我我做這太複雜了:)我最終選擇了一個不同的選項。 'scoped_ptr'來處理非拷貝多態語義。在這個包裝中添加線程安全性的對象(將張貼在另一個問題)。因此保持線程細節並將其從頂層算法中拷貝出來。 –
另一個更新,一年後重新訪問代碼。上面提到的'deepCopy'的問題是(我認爲)它將在並行的每次迭代中調用一次,因爲每個線程只需要一次。所以,事情是把這個類包裝在另一個具有深層複製語義的類中,以將它傳遞到並行區域,然後將其解包到該區域中以進行淺拷貝。 –