![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
多线程
Coder.Z
这个作者很懒,什么都没留下…
展开
-
多线程,锁
现在公司的代码动不动各种崩溃,原因大部分是由不加锁引起的。例如很多的底层数据,全部封装成了AfxGetXXX的形式,对所有的类,模块全部暴露:例如,一个缓存类,DataCache, 其中有个std::map保存数据,那么会有一个全局的AfxGetDataCache()返回这个数据结构,其中居然提供了接口std::map &GetCache()接口,所以导致了多线程中直接操作数据引起崩溃的风原创 2015-11-24 16:30:41 · 356 阅读 · 0 评论 -
同步异步阻塞非阻塞
作者未知,不过感谢如此精辟的总结:老张爱喝茶,废话不说,煮开水。出场人物:老张,水壶两把(普通水壶,简称水壶;会响的水壶,简称响水壶)。1 老张把水壶放到火上,立等水开。(同步阻塞)老张觉得自己有点傻2 老张把水壶放到火上,去客厅看电视,时不时去厨房看看水开没有。(同步非阻塞)老张还是觉得自己有点傻,于是变高端了,买了把会响笛的那种水壶。水开之后,能大声发出嘀~~~转载 2016-10-27 10:37:15 · 250 阅读 · 0 评论 -
返回值的锁
在多线程编程中,时刻需要注意加锁,这也是多线程编程中的一个难点。 但是我们所用到的锁都是“协议锁”,即是一个“君子协定”,所谓“防君子不防小人”。这也是多线程编程中比较让人肾疼的地方。 我觉得用“锁”这个名词对编程中的这种操作现象进行描述其实是不太合适的,反而会引起歧义,把它看成是门口挂的一块“告示牌”会更合适一些---一面写着“有人勿进”,一面写着“空闲可用”。 你原创 2016-11-10 17:53:03 · 646 阅读 · 0 评论 -
C++通过bind,lambda表达式等实现简单的异步函数调用模型
用C++写代码的时候,有很多的场景需要关注一种情况,就是当需要调用一个可能引起长时间阻塞的函数(例如阻塞式的io操作)。大家遇到这种情况,代码的写法一般是这样的:1.调用需要阻塞以等待操作Func完成的接口 -> 成功 调用 FcncDone这样的调用方式会导致线程阻塞,尤其是在主线程中,应该避免这样的调用方式,以免造成用户体验上的卡顿,转化为如下写法:2.使用异步的方式(创建线程原创 2017-06-13 15:57:17 · 3975 阅读 · 0 评论 -
对C++锁的一些思考
C++中的多线程编程是一个相对复杂,坑比较多,并且出现问题较难排查的一个编程领域,也是c++编写大型项目中避不开的部分。加锁的方式有很多,应用场景也各都稍有不同,根据不同维度(或者侧重点,比如是原子化操作还是通知,技术属于乐观锁还是悲观锁,内核级别还是用户级别,linux平台还是win平台)可以分成很多类别,但其作用都是服务于多线程程序的稳定运行,所以一般都统称为“锁”。比如原子类型(使用场景如在...原创 2018-03-05 16:17:03 · 3585 阅读 · 0 评论