zoukankan      html  css  js  c++  java
  • 理解 shared_ptr实现copy-on-write(COW)

    看muduo库某个生产者消费者的地方,利用shared_ptr有效减少了锁的范围及无用的拷贝,下面来看一看

    // reader 消费者,
    shared_ptr<map<string,int> > rd_data ;
    {
         MutexLockGuard lock(mutex);  利用局部锁减少锁的粒度
         rd_data = _data;
    }
    // xxx do stuff
    rd_data.doSomething();
     
    // writer  生产者
    MutexLockGuard lock(mutex);
    if (!_data.unique()) {      利用智能指针的特性来判断是否有消费者正在处理数据
         shared_ptr<map<string,int> > copy_data(new map<string,int>(*_data));
         _data.swap(copy_data);  // _data这个智能指针所指向的内容已经换成最新的了,但是reader所拥有的那个指针其实指向的的还是老的数据
    }
    // xx do stuff
    _data.doSomething();

    1) 当reader要获取_data时,shred_ptr引用计数+1
    2) 当writer要写_data时,判断是否当前线程是_data的唯一拥有者,如果不是,那么拷贝一份_data,更新新的_data,此时reader会读取老的那份_data
    3) 在shred_ptr引用计数会加减的地方用MutexLockGuard保护

  • 相关阅读:
    Javascript事件模型
    关于node.js(一)
    JavaScript表单编程总结
    使用Dom操纵样式表
    文档对象模型Dom
    浏览器对象模型BOM总结
    在javascript中正则表达式的概念与应用
    CSS块级元素、内联元素概念
    HTTP协议
    [学习记录]BFS思路详解
  • 原文地址:https://www.cnblogs.com/wangshaowei/p/11649901.html
Copyright © 2011-2022 走看看