设为首页 加入收藏

TOP

muduo读书笔记
2017-06-20 10:22:44 】 浏览:5780
Tags:muduo 读书 笔记

muduo读书笔记

在多线程程序中,存在了太多的竞态条件。做到线程安全的办法是让它们顺序执行,而不要并发执行(关键是不要同时读写共享状态),也就是让每个成员函数的临界区不重叠。用互斥器能解决这一问题,前提是互斥器必须有效,但是析构函数破坏了这一假设,它会把mutex成员变量销毁掉。

muduo库提出的解决办法是智能指针

C++11标准库引入了智能指针,shared_ptr是引用计数型智能指针,当引用计数降为0时,对象(资源)即被销毁。weak_ptr也是一个引用计数型智能指针,但是它不增加对象的引用次数,即弱(weak)引用。

关键点:

shared_ptr控制对象的生命期。shared_ptr是强引用(想象成用铁丝绑住堆上的对象),只要有一个指向x对象的shared_ptr存在,该x对象就不会析构。当指向对象x的最后一个shared_ptr析构或reset()的时候,x保证会被销毁。 weak_ptr不控制对象的生命期,但是它知道对象是否还活着(想象成用棉线轻轻拴住堆上的对象)。如果对象还活着,那么它可以提升(promote)为有效的shared_ptr;如果对象已经死了,提升会失败,返回一个空的shared_ptr。 shared_ptr/weak_ptr的“计数”在主流平台上是原子操作,没有用锁,性能不俗。

shared_ptr/weak_ptr的线程安全级别与std::string和STL容器一样。

C++里面可能出现的内存错误

缓冲区溢出(buffer overrun) 空悬指针/野指针 重复释放(double delete) 内存泄漏(memory leak) 不配对的new[]/delete

内存碎片(memory fragmentation)

用智能指针能很轻易地解决前面5个问题

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇g++编译和链接 下一篇我的第一个shell脚本

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目