c++ - 为什么存在 shared_ptr 的原子重载

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

为什么有 shared_ptr 的原子重载,如 here 所述而不是为处理 shared_ptrstd::atomic 专门化。似乎与其余 C++ 标准库采用的面向对象模式不一致。

在使用 shared_ptr 实现 read copy update idiom 时,为了确保我做对了我们需要通过这些函数对共享指针进行所有访问(读取和写入)吗?

最佳答案

因为:

std::atomic may be instantiated with any TriviallyCopyable type T.

来源:http://en.cppreference.com/w/cpp/atomic/atomic

std::is_trivially_copyable<std::shared_ptr<int>>::value == false;

因此,您无法实例化 std::atomic<>std::shared_ptr<> .但是,自动内存管理在多线程中很有用,因此提供了这些重载。然而,这些重载很可能不是无锁的(首先使用 std::atomic<> 的一大吸引力);他们可能使用锁来提供同步性。

关于你的第二个问题:是的。

关于c++ - 为什么存在 shared_ptr 的原子重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38112882/

相关文章:

c++ - 类继承调用不同的构造函数

c++ - 从 vector 切换到双端队列的大小限制通常是多少?

c++ - 在 g++ 中是在后台使用 pthreads 的 C++ 11 线程模型吗?

c++ - 传递 std::shared_ptr 的 std::vector,不更新对象

c++ - 我可以在没有自定义析构函数的情况下使用 std::shared_ptr 和 weak_ptr 创建共享对象池吗?

c++ - 读取保存在内存中的 .txt 文件

c++ - Qt GUI事件记录和回放

c++ - 通过套接字发送和接收 std::string

c++ - boost 共享指针构造函数析构函数

python - 使用 SWIG 包装共享指针对象不授予对类成员函数的访问权限