陈硕多线程服务器编程--持续更新

1、https://www.cnblogs.com/yc_sunniwell/archive/2010/07/14/1777432.html C++中voliate关键字,多线程共享变量用voliate修饰,因为有时候编译器优化,我们取值直接从寄存器中拿来,但是寄存器和内存中这个数据可能不一样,具体例子可以看链接中,所有加voliate修饰,保证每次都是从内存中拿和放。

2、weak_ptr不仅仅可以解决循环引用的问题,现在给你一个实际场景:
全局数组里面的指针指向的数据不知道是否还存在,我们不能拿来直接判是不是null(如果原来的没有了,被替换成别的了),这时候可以用智能指针,原来的数据用shared_ptr指向,weak_ptr记录,当我们处理数组的时候,这个weak_ptr的cnt=0就说明被销毁了,我们删掉,如果没有就weak_ptr.lock再拿来用。

3、可重入锁和不可重入锁的设计思想不同,可重入锁侧重一个线程占用一个锁,在单个线程内这个锁是安全的。不可重入,在单个线程内也只能被占用一次,实现原理就是添加了一个计数。 标志下现在的占用线程,记录下线程占用计数,当占用数为0的时候才可以被其他线程所占用。

4、shared_ptr的安全级别和string等标准库一致,多个线程可同时读,读写就要要加锁。
当发生读写的时候我们还是加上互斥锁(最简单的锁)吧。

智能指针不需要我们定义虚析构了,因为指针存了两个东西,这个对象的引用,还有指向的指针,销毁时会同时释放,可以查看源码。

5、

发布了81 篇原创文章 · 获赞 94 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_41033366/article/details/105452146