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,031評論 0 13
  • 多線程、特別是NSOperation 和 GCD 的內部原理。運行時機制的原理和運用場景。SDWebImage的原...
    LZM輪回閱讀 2,039評論 0 12
  • __block和__weak修飾符的區別其實是挺明顯的:1.__block不管是ARC還是MRC模式下都可以使用,...
    LZM輪回閱讀 3,364評論 0 6
  • iOS面試小貼士 ———————————————回答好下面的足夠了------------------------...
    不言不愛閱讀 2,013評論 0 7
  • 視覺記錄是一個把語言變成圖像加文字的過程,你要克服的第一個心理障礙就是不要覺得用語言表達就比用畫的簡單。嘗試過后你...
    U小優閱讀 877評論 0 2