原子整数の配列、すなわち、それぞれが原子であるn個の整数を作成する必要があります。私はstd::vector<std::atomic<int>>
は動作しませんが、私は次のアプローチを試してみて、clangでうまくコンパイルすることがわかりました。C++でダブルポインタを使用してアトミックの動的配列を宣言するのは正しいですか?
これは正しいのですか?また、a[i][0]
がすべてここにアトミックになるかどうかを確認する方法はありますか(複数のスレッドでチェックすることを除く)?
原子整数の配列、すなわち、それぞれが原子であるn個の整数を作成する必要があります。私はstd::vector<std::atomic<int>>
は動作しませんが、私は次のアプローチを試してみて、clangでうまくコンパイルすることがわかりました。C++でダブルポインタを使用してアトミックの動的配列を宣言するのは正しいですか?
これは正しいのですか?また、a[i][0]
がすべてここにアトミックになるかどうかを確認する方法はありますか(複数のスレッドでチェックすることを除く)?
あなたのコードは正しいです(リソースのリークを除いて、私は配列を破壊することは簡潔さのため省略されていると仮定します)。しかし複雑です。まず第一に、 "ダブルポインタ"またはポインタへのポインタを使用する理由は何ですか?なぜこれではない:これはあなたのために働く場合は、
std::vector<std::atomic<int>> a2(n);
があまりにも動作するはず
std::atomic<int> * a1 = new std::atomic<int>[ n ];
、いくつかの違いがありますが、最も重要なのは、おそらくあなたは値によってa1
を渡した場合ということです、内容はコピーされませんが、値によってa2
を渡すと、内容はコピーされます。
std::atomic
はコピーできないため、これは問題がある可能性があります。所有権を移転する必要がある場合を除いて、常にa2
を参照渡しする必要があります。その場合はstd::move
とrvalue参照を使用してください。値でa2
を渡すことはできません。
'std :: vector>は動作しません。何を試しましたか? 'std :: vector > a(n);'非常にうまくいきます。 –
「a [i] [0] 'がすべて原子であるかどうかを確認することはどういう意味ですか?彼らのタイプは 'std :: atomic'です。他に何を知っておく必要がありますか? –
私は 'std :: vector>'で 'resize()'を呼び出そうとしていましたが、それが原因でした。しかし、はい、それは完全に動作します、ありがとう。 –