C ++ 11中shared_ptr的原子操作

时间:2012-06-09 00:54:20

标签: c++ c++11 shared-ptr

通过阅读c ++ 11草案n3242,第20.7.2.5节,看起来我们对shared_ptr进行了原子操作,这使我们能够在复杂的结构上进行无锁,而不必担心GC /内存泄漏。 / p>

但是,我无法在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还没有实现呢?

3 个答案:

答案 0 :(得分:3)

有人建议弃用shared_ptr的这些atomic_store / atomic_load方法,转而使用新的atomic_shared_ptr类:http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4162.pdf

因此,当你获得带有atomic_load的libstc ++版本时,它可能已经很好地包含了新的原子指针,这在几个方面都更好。

MSVC STL不久前已经实现了这些方法,libc ++也声称符合C ++ 11/14标准,所以它们必须以最新版本提供。

答案 1 :(得分:2)

看起来它还没有在libstdc ++中。

它也不在libc ++中

VS11 beta有它。我认为这是我在VS11的库中找到的第一个不在libc ++中的东西。

答案 2 :(得分:-6)

使用clang ++和-std = c ++ 11来编译应该使其运行的代码。