shared ptr

来源:互联网 发布:合肥淘宝美工培训 编辑:程序博客网 时间:2024/05/29 17:53
template< class T>class my_auto_ptr {private:    T* m_ptr; //被封装的指针public:    my_auto_ptr( T* p) :m_ptr( p ) { }    ~my_auto_ptr() { delete m_ptr; }    T& operator*() { return *m_ptr;}    T* operator->() { return m_ptr;}}
    //多线程共享全局变量    shared_ptr<map> g_data;    //读请求    read() {        shared_ptr<map> data;        {            lock();            data = g_data;            unlock();        }        //查询操作        query_process(data);     }     //写请求     write() {        lock();        if (!g_data.unique())        {            shared_ptr<map> newData(new map(*g_data));            g_data.swap(newData);        }        //更新        update_process(g_data);         unlock();    } 

使用 shared_ptr::unique()来判断是不是有线程在读。如果在读,那么不能直接修改,因为read()并没有全程加锁。shared_ptr::swap()把g_data 替换为新副本,此时还在锁里,不会有别的线程来读,可以放心地更新。

原创粉丝点击