2020工程
2020工程
聂炳玉
不断学习,不断提升
展开
-
007.生产者消费者队列(首尾读写)
所谓的生产者消费者队列,即一个线程读一个线程写的队列我们这里实现的是一个无锁的生产者消费者队列,算法的关键点:1.pop只修改头节点,push只修改尾节点2.保证head和tail非空,因为一旦head和tail为空,push时就必须同时改写head和tail特别说明:1.该生成者消费者队列理论上同时只允许一个线程读和一个线程写2.可以允许多个读线程申请读,但每一时刻只允许一个真正读,...原创 2020-01-14 17:48:30 · 285 阅读 · 0 评论 -
006.反应器接口
/********************************************************************* 文件名: IReactor.h** 描 述:** 应 用:********************************************************************/#pragma once/// 事件处理程序...原创 2020-01-13 20:29:19 · 191 阅读 · 0 评论 -
005.生产者消费者队列(翻转队列)
翻转队列 在多线程生产者-消费者模式中生产者线程向队列添加对象,消费者线程从队列取走对象因为涉及到多线程访问,这个队列必须在添加/取走对象时加锁。这个模版实现这种多线程安全的队列,另外使用两个队列翻转的技术,可以极大的减少锁互斥的几率。SwappingListEx 对SwappingList进行了一层封装,当只有一个线程读,多个线程取;一个线程取,多个线程读,读、写是不用同时加锁...原创 2020-01-13 17:34:07 · 287 阅读 · 0 评论 -
004.多线程内存池
多线程安全内存池内存分配通常是影响一个系统性能的关键所在。内存分配的主要性能瓶颈有:1.由于Windows分配时需要进入操作系统内核态,而进入一个内核态至少需要2000个CPU时钟周期2.频繁的小内存分配会导致内存出现大量碎片,另外容易引发内存页面错误3.当有多个线程需要分配内存时,内存池必须加锁,加锁也需要进入内核态,更重要的是锁碰撞引起自旋等待将浪费大量cpu空转时间实现思...原创 2020-01-11 16:09:52 · 634 阅读 · 0 评论 -
003.线程池
线程池实现,看类图和代码:/********************************************************************* 文件名: Thread.h** 描 述:** 应 用:********************************************************************/#pragma ...原创 2020-01-09 11:20:49 · 199 阅读 · 0 评论 -
002.锁
直接代码#pragma once;#include <windows.h>//////////////////////////////////////////////////////////////////////////// 互斥体class Mutex{ CRITICAL_SECTION m_cs;public: Mutex(); ~Mutex(); ...原创 2020-01-06 14:22:43 · 126 阅读 · 0 评论 -
001.单例实体
工作中一些类对象在整个工程中只需要有一份就可以,例如:线程池、内存池、日志引擎、数据库引擎等等。我们可以处理的方法有:定义成全局变量、使用单实体模式(自己取的名称)。下面实例时用到了2个方法:Singleton和SingletonEx。直接看代码/********************************************************************* 文件...原创 2020-01-08 10:45:09 · 248 阅读 · 0 评论 -
2020工程开篇
对自己这几年工作进行总结和归纳,以一个工程逐渐展开。该工程使用C++编写,会涉及到实际工作中用到的案例,主要以代码形式来说明。原创 2020-01-08 10:33:13 · 145 阅读 · 0 评论