c++ - C++11 中 shared_ptr 的原子操作

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

通过阅读 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 还没有实现?

最佳答案

有一个建议弃用这些用于 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,因此它们必须在其最新版本中可用。

关于c++ - C++11 中 shared_ptr 的原子操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10957561/

相关文章:

c++ - 标题中的缩进成员

c++ - SWIG 无法正确转换 typedef 类型

c++ - 为什么在基于范围的初始化程序中使用临时对象会导致崩溃?

c++ - 第一次分配后如何更改const std::shared_ptr?

c++ - Boost Pointer Container - 不能将类存储为 ptr_map 的键

c++ - 确保 QTableView 中列的唯一值

c++ - 如何将char字符串转换为std字符串

c++ - 在不使用 std::bind 的情况下获取成员函数的 c++11 函数包装器

c++ - std::swap between std::shared_ptr<A> 其中 A 具有动态数组

c++ - 将 shared_ptr 用于 linked_list 在析构函数中给出 stackoverflow