Ceph引用计数对象实现

类成员:

struct RefCountedObject {
  private:
    atomic_t nref;
    CephContext *cct;

原子变量nref用于对cct对象进行计数,每当调用get函数,计数加一:

  RefCountedObject *get() {
    int v = nref.inc();
    if (cct)
    lsubdout(cct, refs, 1) << "RefCountedObject::get " << this << " "<< (v - 1) << " -> " << v<< dendl;
    return this;
  }

调用put函数,计数减一:

  void put() {
    CephContext *local_cct = cct;
    int v = nref.dec();
    if (v == 0) {
      ANNOTATE_HAPPENS_AFTER(&nref);
      ANNOTATE_HAPPENS_BEFORE_FORGET_ALL(&nref);
      delete this;
    } else {
      ANNOTATE_HAPPENS_BEFORE(&nref);
    }
    if (local_cct)
        lsubdout(local_cct, refs, 1) << "RefCountedObject::put " << this << " "<< (v + 1) << " -> " << v<< dendl;
  }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.项目经验 2.基础问题 3.指南认识 4.解决思路 ios开发三大块: 1.Oc基础 2.CocoaTouch...
    阳光的大男孩儿阅读 5,047评论 0 13
  • 多线程、特别是NSOperation 和 GCD 的内部原理。运行时机制的原理和运用场景。SDWebImage的原...
    LZM轮回阅读 2,043评论 0 12
  • __block和__weak修饰符的区别其实是挺明显的:1.__block不管是ARC还是MRC模式下都可以使用,...
    LZM轮回阅读 3,387评论 0 6
  • iOS面试小贴士 ———————————————回答好下面的足够了------------------------...
    不言不爱阅读 2,014评论 0 7
  • 视觉记录是一个把语言变成图像加文字的过程,你要克服的第一个心理障碍就是不要觉得用语言表达就比用画的简单。尝试过后你...
    U小优阅读 879评论 0 2