写时复制技术(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) |