博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c++ 多线程编程 笔记
阅读量:4029 次
发布时间:2019-05-24

本文共 1787 字,大约阅读时间需要 5 分钟。

1、

空悬指针(dangling pointer)指向已经销毁的对象或已经回收的地址,

野指针(wild pointer)指的是未经初始化的指针

2、在面向对象程序设计中,对象的关系主要有三种composition、aggregation、association。

composition(组合/复合)关系在多线程里不会遇到什么麻烦,因为对象x 的生命期由其唯一的拥有者owner 控制,owner 析构的时候会把x 也析构掉。从形式上看,x 是owner 的直接数据成员,或者scoped_ptr 成员,抑或owner 持有的容器的元素。

后两种关系在C++ 里比较难办, 处理不好就会造成内存泄漏或重复释放。

association(关联/联系)是一种很宽泛的关系,它表示一个对象a 用到了另一个对象b,调用了后者的成员函数。从代码形式上看,a 持有b 的指针(或引用),但是b的生命期不由a 单独控制。

aggregation(聚合)关系从形式上看与association 相同,除了a 和b 有逻辑上的整体与部分关系。如果b 是动态创建的并在整个程序结束前有可能被释放,那么就会出现§1.1 谈到的竞态条件。

3、shared_ptr/weak_ptr

shared_ptr是引用计数型智能指针,在Boost 和std::tr1 里均提供,也被纳入C++11 标准库,现代主流的C++ 编译器都能很好地支持。shared_ptr<T> 是一个类模板(class template),它只有一个类型参数,使用起来很方便。引用计数是自动化资源管理的常用手法,当引用计数降为0 时,对象(资源)即被销毁。

weak_ptr也是一个引用计数型智能指针,但是它不增加对象的引用次数,即弱(weak)引用

 

shared_ptr控制对象的生命期。shared_ptr 是强引用(想象成用铁丝绑住堆上的对象),只要有一个指向x 对象的shared_ptr 存在,该x 对象就不会析构。当指向对象x 的最后一个shared_ptr 析构或reset() 的时候,x 保证会被销毁。

• weak_ptr 不控制对象的生命期,但是它知道对象是否还活着(想象成用棉线轻轻拴住堆上的对象)。如果对象还活着,那么它可以提升(promote)为有效的shared_ptr;如果对象已经死了,提升会失败,返回一个空的shared_ptr。“提升/lock()”行为是线程安全的。
• shared_ptr/weak_ptr 的“计数”在主流平台上是原子操作,没有用锁,性能不俗。
• shared_ptr/weak_ptr 的线程安全级别与std::string 和STL 容器一样,

 4、muduo

muduo 的头文件明确分为客户可见和客户不可见两类。。对于使用muduo 库而言,只需要掌握5 个关键类:Buffer、EventLoop、TcpConnection、TcpClient、TcpServer

公开接口

• Buffer 仿Netty ChannelBuffer 的buffer class,数据的读写通过buffer 进行。用户代码不需要调用read(2)/write(2),只需要处理收到的数据和准备好要发送的数据(§7.4)。
• InetAddress 封装IPv4 地址(end point),注意,它不能解析域名,只认IP 地址。因为直接gethostbyname(3) 解析域名会阻塞IO 线程。
EventLoop 事件循环(反应器Reactor),每个线程只能有一个EventLoop 实体,它负责IO 和定时器事件的分派。它用eventfd(2) 来异步唤醒,这有别于传统的用一对pipe(2) 的办法。它用TimerQueue 作为计时器管理,用Poller 作为IO multiplexing。
• EventLoopThread 启动一个线程,在其中运行EventLoop::loop()。
TcpConnection 整个网络库的核心封装一次TCP 连接,注意它不能发起连接。
• TcpClient 用于编写网络客户端,能发起连接,并且有重试功能。
• TcpServer 用于编写网络服务器,接受客户的连接。

未完待续.......

转载地址:http://fmobi.baihongyu.com/

你可能感兴趣的文章
iOS 扫一扫功能开发
查看>>
iOS app之间的跳转以及传参数
查看>>
iOS __block和__weak的区别
查看>>
Android(三)数据存储之XML解析技术
查看>>
Spring JTA应用之JOTM配置
查看>>
spring JdbcTemplate 的若干问题
查看>>
Servlet和JSP的线程安全问题
查看>>
GBK编码下jQuery Ajax中文乱码终极暴力解决方案
查看>>
jQuery性能优化指南
查看>>
Oracle 物化视图
查看>>
Multi-Task Networks With Universe, Group, and Task Feature Learning-阅读笔记
查看>>
A Survey of Zero-Shot Learning: Settings, Methods, and Applications-阅读笔记
查看>>
Cross-Domain Review Helpfulness Prediction -论文阅读
查看>>
NLP数据增强方法-(一)
查看>>
BERT+实体-百度ERNIE优化了啥
查看>>
NLP数据增强方法-动手实践
查看>>
学习让机器学会学习-Meta Learning课程笔记-1
查看>>
学习让机器学会学习-Meta Learning课程笔记-2
查看>>
RNN及其变种LSTM/GRU/SRU
查看>>
我还不知道Attention有哪些-公式代码都带你搞定
查看>>