k要素のベクトルを作成する必要があります。すべてのスレッドはその部分を作成し、k * 25%とし、任意のインデックスでベクトルに配置する必要があります。このexampleから駆動、私はこのような何かしようとしていました:ベクトルを並行して配置する場合、重要でない順序
std::atomic<std::vector<aClass<templatedType>>> H;
をが、これは動作しません:それは自明コピー可能ではありませんので、
/Library/Developer/CommandLineTools/usr/bin/../include/c++/v1/atomic:823:13: error:
_Atomic cannot be applied to type
'std::__1::vector<StableHashFunction<int>,
std::__1::allocator<StableHashFunction<int> > >' which is not trivially
copyable
mutable _Atomic(_Tp) __a_;
- と回避策は甘くはありません。さらに、私はそれが原子的である必要がありますか?
それは私が順序を気にしないとき、私はまだ原子を使うべきですか?言い換えれば、データ競合は要素の順序にのみ影響を及ぼしますか、要素を覆うような副作用を引き起こす可能性があります(k要素の代わりに、最後にk-1しか持たない)?
'一back()'や 'emplace_back()'、アトミック操作ではありませんので、あなたは 'のstd :: mutex'のようないくつかの同期メカニズムとそれらを保護する必要があります。 –
サイズKのベクトルを作成してから、ベクトルの各スレッド更新部分を作成して、スレッド間でデータを共有しないようにします。 – Jarod42
@ Jarod42それは私の最初の考えでしたが、それを行うには、ベクトルのすべての要素をデフォルトで構築する必要があります。 – NathanOliver