Chinaunix首页 | 论坛 | 博客
  • 博客访问: 432207
  • 博文数量: 43
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 518
  • 用 户 组: 普通用户
  • 注册时间: 2015-12-14 12:10
个人简介

邮箱:oxwangfeng@qq.com

文章分类

全部博文(43)

文章存档

2021年(1)

2018年(7)

2017年(9)

2016年(26)

我的朋友

分类: C/C++

2016-06-10 23:23:17

写时复制技术(cow):
写时复制(copy-on-write)是一种可以推迟甚至避免复制数据的技术内核此时并不是复制整个进程空间,而是让父进程和子进程共享同一个副本
写时复制,发生写时才复制内存地址空间

智能指针的作用:
std::shared_ptr
shared_ptr的作用有如同指针,但会记录有多少个shared_ptrs共同指向一个对象。这便是所谓的引用计数(reference counting)。一旦最后一个这样的指针被销毁,也就是一旦某个对象的引用计数变为0,这个对象会被自动删除。
智能指针使用方式:
std::shared_ptr,Class包含析构函数,当调用析构函数的时候,会检查引用计数,一旦引用计数为0,这个对象会被自动删除;

多线程下如何实现写时复制?如果解决写时复制的锁问题?
添加引用计数;
1.一个指针数组,每个指针都指向一块内存;对每个内存添加计数(使用原子锁),当有线程使用时,计数加一,使用完毕,计数减一;
2.当一个线程想修改指针数组的一块数据时,就生成一个新的内存,并且指针指向这个新内存块;
3.当旧内存的引用计数,归于0的时候,释放旧内存;

使用shared_ptr实现写时复制图:



 shared_ptr的线程安全性:

   shared_ptr 本身不是 100% 线程安全的。它的引用计数本身是安全且无锁的。

  • 一个 shared_ptr 实体可被多个线程同时读取;
  • 两个的 shared_ptr 实体可以被两个线程同时写入,“析构”算写操作;
  • 如果要从多个线程读写同一个 shared_ptr 对象,那么需要加锁。

阅读(4807) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~