c++多线程多进程服务器muduo相关函数查询表(二)

如表一所示,本文也只是作为记录,想了解具体的函数使用方法,请进入相应的链接中查看:

1、pthread_once(pthread_once_t *once_control, void (*init_routine) (void))
    在多线程环境中,有些函数仅需要执行一次,可以采用pthread_once来声明,具体是哪个线程
执行由Linux内核调度来进行
https://blog.csdn.net/sjin_1314/article/details/10934239
    

2、智能指针——shared_ptr
    std::shared_ptr使用引用计数. 每一个shared_ptr的拷贝都指向相同的内存. 
在最后一个shared_ptr析构的时候, 内存才会被释放.
(1)同一个shared_ptr被多个线程“读”是安全的。

(2)同一个shared_ptr被多个线程“写”是不安全的。

(3) 共享引用计数的不同的shared_ptr被多个线程”写“ 是安全的

同一个shared_ptr被多个线程读,是线程安全的;
同一个shared_ptr被多个线程写,不是 线程安全的;

共享引用计数的不同的shared_ptr被多个线程写,是线程安全的。 

    对于第三点,我们一般采用: 
对于线程中传入的外部shared_ptr对象,在线程内部进行一次新的构造,
例如: sharedptr AObjTmp = outerSharedptrObj;


https://blog.csdn.net/yusiguyuan/article/details/20076061
https://blog.csdn.net/yusiguyuan/article/details/22037833
https://blog.csdn.net/u013007900/article/details/79939078
https://www.sogou.com/link?url=DOb0bgH2eKh1ibpaMGjuy-bOxZBaCgftTbIYflqkPa4bl_9GOWLsw65J0qkIwiwu8vlK3s6aheDzozhqK6R1Ug..

3、智能指针——weak_ptr
    weak_ptr是为配合shared_ptr而引入的一种智能指针来协助shared_ptr工作,它可以从一个
shared_ptr或另一个weak_ptr对象构造,它的构造和析构不会引起引用记数的增加或减少。没有重载*
和->但可以使用lock获得一个可用的shared_ptr对象,注意, weak_ptr 在使用前需要检查合法性.

    weak_ptr的一个重要用途是通过lock获得this指针的shared_ptr,使对象自己能够生产
shared_ptr来管理自己,但助手类enable_shared_from_this的shared_from_this会返回this的
shared_ptr,只需要让想被shared_ptr管理的类从它继承即可

    使用 weak_ptr 解决 shared_ptr 因循环引有不能释放资源的问题
http://www.cnblogs.com/diysoul/p/5930372.html
https://blog.csdn.net/mmzsyx/article/details/8090849

4、智能指针——unique_ptr
    unique_ptr是一种定义在中的智能指针(smart pointer)。它持有对对象的独有权——两
个unique_ptr不能指向一个对象,不能进行复制操作只能进行移动操作
    与shared_ptr不同,unique_ptr没有定义类似make_shared的操作,因此只可以使用new来
分配内存,并且由于unique_ptr不可拷贝和赋值,初始化unique_ptr必须使用直接初始化的方式
    事实上不能拷贝unique_ptr的规则有一个例外:我们可以拷贝或赋值一个将要被销毁的unique_ptr
https://www.sogou.com/link?url=DOb0bgH2eKh1ibpaMGjuy6YnbQPc3cuKncNgn2NO7OtomuBEhdSpHkUUZED5fr2Ou2hqaUvI2wY_c1NbUyGLxQ..
http://www.cnblogs.com/DswCnblog/p/5628195.html

5、 boost模板类——std::enable_shared_from_this
    (1)std::enable_shared_from_this 能让一个对象(假设其名为 t ,且已被一个 
std::shared_ptr 对象 pt 管理)安全地生成其他额外的 std::shared_ptr 实例(假设名为 pt1, 
pt2, ... ) ,它们与 pt 共享对象 t 的所有权。
       
    (2)若一个类 T 继承 std::enable_shared_from_this<T> ,则会为该类 T 提供成员函数:
shared_from_this 。 当 T 类型对象 t 被一个为名为 pt 的 std::shared_ptr<T> 类对象管理时,
调用 T::shared_from_this 成员函数,将会返回一个新的 std::shared_ptr<T> 对象,
它与 pt 共享 t 的所有权。
    (3)在异步调用中,存在一个保活机制,异步函数执行的时间点我们是无法确定的,
然而异步函数可能会使用到异步调用之前就存在的变量。为了保证该变量在异步函数执期间一直有效,
我们可以传递一个指向自身的share_ptr给异步函数,这样在异步函数执行期间share_ptr所管理的对
象就不会析构,所使用的变量也会一直有效了(保活)。这就确保了对象的生存周期大于回调中构造的函数对象的生命周期

https://blog.csdn.net/caoshangpa/article/details/79392878

https://my.oschina.net/hevakelcj/blog/2059230

https://www.cnblogs.com/jily/p/6424231.html

6、循环引用——基于计数的共享机制(shared_ptr)将会被彻底击败。
    在使用基于引用计数的智能指针时,要特别小心循环引用带来的内存泄漏,循环引用不只是
两方的情况,只要引用链成环都会出现问题。当然循环引用本身就说明设计上可能存在一些问题,如
果特殊原因不得不使用循环引用,那可以让引用链上的一方持用普通指针(或弱智能指针weak_ptr)即可。
https://www.cnblogs.com/itZhy/archive/2012/10/01/2709904.html

7、c++中的静态成员和静态成员函数
    当调用一个对象的非静态成员函数时,系统会把该对象的起始地址赋给成员函数的this指针。
而静态成员函数并不属于某一对象(所有对象共有,没有this指针,不能访问本类中非静态成员,有点
惨),它与任何对象都无关。
    可以说静态成员函数的出现就是为了处理静态成员变量的。在C++中,静态成员是属于整个类
的而不是某个对象,静态成员变量只存储一份供所有对象共用。所以在所有对象中都可以共享它。使用
静态成员变量实现多个对象之间的数据共享不会破坏隐藏的原则,保证了安全性还可以节省内存。
https://blog.csdn.net/vict_wang/article/details/81288272
https://blog.csdn.net/csunking/article/details/45618273

8、TCP的保活机制
    双方建立交互的连接,但是并不是一直存在数据交互,有些连接会在数据交互完毕后,主动
释放连接,而有些不会,那么在长时间无数据交互的时间段内,交互双方都有可能出现掉电、死机、
异常重启等各种意外,当这些意外发生之后,这些TCP连接并未来得及正常释放,那么,连接的另一
方并不知道对端的情况,它会一直维护这个连接,长时间的积累会导致非常多的半打开连接,造成
端系统资源的消耗和浪费,为了解决这个问题,在传输层可以利用TCP的保活报文来实现。
https://www.sogou.com/link?url=hedJjaC291OB0PrGj_c3jLEFOfDkmI-hPoBZOqRNCvddzunhCynbGLU6DtrNzhoz_PqQBo74RSy_8_sVDrvNTg..
https://blog.csdn.net/s_lisheng/article/details/87288445

9、boost::bind()
boost提供的bind,它提供了统一的接口,提供了更多的支持,比如说它增加了shared_ptr,虚函数,类成员的绑定。
https://www.cnblogs.com/blueoverflow/archive/2015/08/18/4740093.html
https://blog.csdn.net/acs713/article/details/24981833
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值