【问题标题】:Understanding how the strong reference count on shared pointers is increased?了解如何增加共享指针的强引用计数?
【发布时间】:2018-03-12 21:14:05
【问题描述】:

我试图了解 C++11 如何处理共享指针控制块上的强引用计数。我很乐意在调用析构函数时将其减一。

我的问题是在运行时增加动态分配的控制块上的强引用计数。在多个运行时上下文的情况下,这对我来说看起来更加复杂。

程序如何从不同的上下文中找到相同的强引用计数?

编辑:我的问题不在于 shared_ptr 的实现。这是关于在多进程/线程/上下文环境中使用它。

【问题讨论】:

  • “增加控制块上的强引用计数”究竟是什么意思
  • 不确定我是否理解问题 - 构造函数将引用计数增加 1,析构函数将其减少 1
  • @nwp "拥有托管对象的 shared_ptrs 的数量" 如en.cppreference.com/w/cpp/memory/shared_ptr中所述
  • 增加引用计数的唯一方法是复制shared_ptr。您知道引用计数是因为您从正在复制的 shared_ptr 获得它。

标签: multithreading c++11 shared-ptr context-switch


【解决方案1】:

程序如何从不同的上下文中找到相同的强引用计数?

不能。不是来自不同的上下文,甚至不是来自 same 的上下文。你看,只有原始对象的地址来找到引用计数是不够的——实际上你必须有引用计数本身的地址。也就是说,你需要std::shared_ptr对象的值!

因此,要让多个上下文/对象/任何“参与”引用T 对象,您需要将相同shared_ptr<T> 实例的副本传递给它们。他们不会自己发现它,也无法生成它。

【讨论】:

  • 感谢您的详细解释。我今天也和我的操作系统教授讨论了这个问题,并理解在设计语言时应该关注这个问题。
猜你喜欢
  • 2018-06-21
  • 1970-01-01
  • 1970-01-01
  • 2021-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多