12

c++11 ドラフトn3242のセクション 20.7.2.5 を読むと、shared_ptr にアトミック操作があるように見えます。これにより、GC/メモリ リークを心配することなく、複雑な構造でロックフリーを行うことができます。

しかし、GCC-4.7.0ではうまく使えませんでした。私は単に次のプログラムをテストしました

#include <atomic>
#include <memory>
#include <string>

struct X {
    int x;
    double y;
    std::string s;
};

int main() {
    std::shared_ptr<X> x(new X);
    auto p = std::atomic_load(&x);
}

コンパイルエラーがあります:

c.cpp:13:33: error: no matching function for call to ‘atomic_load(std::shared_ptr<X>*)’

私がここで見逃したものを誰か知っていますか?それとも、gccがまだそれを実装していないだけですか?

4

3 に答える 3

3

新しいatomic_shared_ptrクラスを支持して、shared_ptrのこれらのatomic_store/atomic_loadメソッドを非推奨にする提案があります: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4162.pdf

したがって、atomic_load を使用して libstc++ バージョンを取得する頃には、新しいアトミック ポインターが既に含まれている可能性が高く、いくつかの面で優れています。

MSVC STL はこれらのメソッドを少し前に実装しており、libc++ も完全な C++11/14 準拠を主張しているため、最新バージョンで利用できる必要があります。

于 2014-12-09T18:12:25.907 に答える
2

libstdc++ にはまだ含まれていないようです。

libc ++にもありません

VS11 ベータ版にはそれがあります。これは、VS11 のライブラリで libc++ にはないものを初めて見つけたものだと思います。

于 2012-06-09T01:06:07.367 に答える