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 替换为新副本,此时还在锁里,不会有别的线程来读,可以放心地更新。
阅读全文
0 0
- shared ptr
- boost shared ptr
- shared ptr多线程使用注意事项
- C++ 智能指针shared-ptr,unique_ptr和weak-ptr
- 从引用计数,auto release pool 到 shared ptr
- shared
- Smart ptr
- Ptr ReturnHandler
- int * (*ptr)()
- byte ptr
- 理解*ptr++
- const ptr与ptr const比较
- printf("%d,%d\n", *ptr, *(++ptr))
- printf("%d,%d\n", *ptr, *(ptr++))
- 汇编里 PTR 用法
- C++ Share Ptr
- boost :Smart ptr
- 转帖 ptr的用法
- 83. Remove Duplicates from Sorted List
- offset分析
- 冒泡排序与选择排序区别
- daemon 需要fork两次原因
- Spark性能优化:开发调优篇
- shared ptr
- 全选反选
- github的一些使用指南
- golang编辑器 Idea IntelliJ
- EF实现批量更新(一般处理程序)
- Java和MySQL数据类型对应表
- Altium Designer设计的pcb文件特别大原因分析之一!
- 热门头条的实现—MarqueeView、ViewFlipper
- php学习路线图