1
C++標準によると、std::atomic
は、任意のトリビュアコピー可能タイプと組み合わせることができます。ただし、GCCは次のエラーメッセージを生成します。GCCにおける容易にコピー可能なタイプの原子オブジェクト
#include <atomic>
struct TriviallyCopyableType {
int a, b, c, d;
};
int main() {
std::atomic<TriviallyCopyableType> a;
a.store({}); // undefined reference to `__atomic_store_16'
a.is_lock_free(); // undefined reference to `__atomic_is_lock_free'
}
ClangとMicrosoftのコンパイラは不平を言っていません。私は何か間違っているのですか?これは既知の問題ですか?結局のところ、アトミックオペレーションはGCC 4.4で数年前に実装されました。別のコンパイラを使用する以外の回避策はありますか? Clangはロックフリーでもstd::atomic<TriviallyCopyableType>
を実装しているので、私は明示的なロックを使いたくありません。
gcc 6.3で問題ありません。私は新しいコンパイラが必要だと思います。あなたは古代です。 –
まあ、私は5.4古代を呼び出すことはありません... – user1494080
それはまだ[関連記事](http://stackoverflow.com/a/15204653/1120273)はまだ関連性があります。可能であれば、 '-latomic'を組み込む必要があります。 –