2016-12-25 3 views
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>を実装しているので、私は明示的なロックを使いたくありません。

+3

gcc 6.3で問題ありません。私は新しいコンパイラが必要だと思います。あなたは古代です。 –

+0

まあ、私は5.4古代を呼び出すことはありません... – user1494080

+3

それはまだ[関連記事](http://stackoverflow.com/a/15204653/1120273)はまだ関連性があります。可能であれば、 '-latomic'を組み込む必要があります。 –

答えて

1

この回答はコメントから集められています。

コマンドラインで-latomicを指定して、アトミックオペレーションライブラリとプログラムを明示的にリンクする必要があります。

-mcx16は、128ビットデータ型でロックフリーのアトミック操作を有効にすることができます。

関連する問題