C++并发
文章平均质量分 60
dxgzg
梦想能成为一名linuxC 服务端开发程序员
展开
-
copy on write手法以及对多线程新的理解
类对象跨线程处理的是十分棘手的,要想清楚一切可能发生死锁的情况加锁的顺序一定要一致,不要出现线程加锁顺序不一致的情况,因为会有死锁的可能发生。伪共享:多根线程在一个缓存行操作,CPU的缓存的缓存行还要和其他缓存行交互,这是一种伪共享参考的链接...原创 2021-01-19 22:19:29 · 386 阅读 · 3 评论 -
C++11读写锁的实现
参考的源码读写锁,一直都有听,也大概知道点原理,一直没有探究内部是如何实现的,正好今天完成了几项大作业,研究一下读写锁实现的原理。读写锁的原理就是,可以多次读,但是写只能一次一次的写入,我参考的源码博控制了写优先,并且读的优先级没我写的这么高。我自己在修改了他的源码,实现的是读优先,并且优先级很高,如果存在大量的读操作,可能会出现写操作线程饥饿的现象。如果在具体的场景中写操作也多,可以修改wait条件来判断优先级。我最近的感悟,如果非必要,一个类的对象不必非要跨线程操作。#include<mu原创 2021-01-08 16:23:04 · 3148 阅读 · 0 评论 -
C++11智能shared_ptr和weak_ptr神兵利器
以前很少使用智能指针,在单线程的情况下,对象的存活周期都好确定,而在多线程中,思考对象存活周期是极其复杂的,以前没觉得,写过和阅读过很多多线程代码,发现跨线程的对象的存活周期是最难确定,很少确定到底在什么地方delete,最近再看muduo网络库这本书,对C++11智能指针又有了新的理解。书中提到shared_ptr相当于强铁丝,weak_ptr相当于细铁丝。这个要怎么理解呢?可以用weak_ptr的lock来判断shared_ptr对象是否还存活,利用lock来判断是否可以进行提升 shared原创 2021-01-08 14:03:42 · 495 阅读 · 0 评论 -
C++async、future、packaged_task、promise的使用
目录asyncfuturepackaged_task用法1async初学多线程的我天真的以为异步和多线程是一样的,直到我看见了std::async这个处理异步的函数(头文件在future里面),我才知道异步和多线程是不一样的。关于多线程与异步区别生动形象的例子为什么有了多线程还需要异步操作?身为初学的我想到了这个问题在网上百度了没百度到,好在今天读书的时候又找到了自己想要的答案了。首先要注意到开启一根多线程是不能保存返回值,那么聪明的你肯定也想到函数增加一个引用类型参数,不就解决了嘛,代码如下。这样原创 2020-11-03 21:05:29 · 544 阅读 · 0 评论 -
C++多线程学习的总结要点
此篇博客专门记录自己学习C++多线程的总结,会想到什么发现什么关键点就记录在这里,也有很多自己的理解和看法,并不一定保证全对原子操作通俗的讲就是这根线程里不会再开一根线程就是原子操作锁的粒度在持有锁的线程中不要进行很耗时的操作,比如进行文件I/O操作,有时候不需要保护数据的时候及时解锁。3.线程唤起condition_variable的用法我们都知道线程的切换会浪费CPU处理的时间。假设有两个线程,线程A和线程B,A往数据队列添加元素,B去处理队列中的元素。如果线程B一直while(tr原创 2020-09-16 21:32:16 · 320 阅读 · 0 评论 -
std::adopt_lock锁的使用
今天刚C++并发编程实战,看到一个lock_guard<std::mutex>l(mutex,std::adopt_lock);我就一直在想这个是什么东西,从字面意思理解,就是收养个锁,去msdn搜了搜,msdn是这样解释的,我也没看懂,后来看了几篇博客,大概理解了。正文 adopt_mutex:adopt_lock确实是跟收养了个锁差不多,在test5不带参数的这个函数中,先上锁,然后托管给lock_guard这个类,这个类称为RALL(资源获取就是初始化),退出这个函数,lock_gu原创 2020-08-25 21:34:05 · 8082 阅读 · 3 评论