摘要: 一、内存池的概念和实现原理 内存池要解决的问题: (1)减少malloc的次数,意味着减少对内存的浪费(主要问题) (2)减少malloc的次数,会有一些速度和效率上的提升,但是提升不明显(顺带) 实现原理: (1)用malloc申请一大块内存,当要分配的时候,从这一大块内存中一点一点分配, 当这一 阅读全文
posted @ 2020-07-01 23:08 min_zhi 阅读(223) 评论(0) 推荐(0) 编辑
摘要: 一、new/delete 的过程 A* pa = new A(); operator new(); // 其中调用malloc来分配内存 A::A(); delete pa; A::~A(); operator delete(); // 其中调用free释放内存 new/delete(malloc/ 阅读全文
posted @ 2020-07-01 21:13 min_zhi 阅读(163) 评论(0) 推荐(0) 编辑
摘要: 一、场景及线程池概念 1、大型服务器,不能每来一个客户端就创建一个线程(否则数量过多) 2、编写代码时,偶尔创建一个线程,这种写法不稳定,系统资源少的情况下,容易出现问题 线程池:把一堆线程放到一起,统一管理,这种统一管理调度,循环利用线程的方式,就叫线程池 二、实现方式 在程序启动的时候,一次性创 阅读全文
posted @ 2020-06-27 22:12 min_zhi 阅读(100) 评论(0) 推荐(0) 编辑
摘要: 一、recursive_mutex class MyClass { public: void Fun1() { // std::lock_guard<mutex> sguard(m_mutex); // 加锁处理共享内存 std::lock_guard<recursive_mutex> sguard 阅读全文
posted @ 2020-06-27 19:41 min_zhi 阅读(415) 评论(0) 推荐(0) 编辑
摘要: 一、windows临界区使用示例 windows临界区的作用与互斥量类似 区别: (1)windows临界区需要初始化 InitializeCriticalSection(&m_winSec); (2)进入临界区相当于lock() EnterCriticalSection(&m_winSec); ( 阅读全文
posted @ 2020-06-27 19:21 min_zhi 阅读(473) 评论(0) 推荐(0) 编辑
摘要: 一、第一个参数 // std::async 第一个参数介绍: // (1)std::launch::deferred: 表示延迟调用,并且不创建线程 // 直到future 对象的get() 函数或wait() 调用,才会执行 MyThread 入口函数,如果没有调用,则MyThread 不会被调用 阅读全文
posted @ 2020-06-27 17:10 min_zhi 阅读(570) 评论(0) 推荐(0) 编辑
摘要: 一、future 扩展 1、future 的其他成员函数 class MyClass { public: int MyThread(int param); // 假定一个线程函数是有返回值的 }; int main() { MyClass ele; std::future<int> result = 阅读全文
posted @ 2020-06-27 15:51 min_zhi 阅读(220) 评论(0) 推荐(0) 编辑
摘要: 一、std::async函数模板、std::future类模板 #include <future> std::async 是个函数模板,返回一个 std::future 对象(类模板) 作用是启动一个异步任务,就是自动创建一个线程并开始执行对应的线程入口函数 可以通过future 的get() 函数 阅读全文
posted @ 2020-06-26 18:40 min_zhi 阅读(209) 评论(0) 推荐(0) 编辑
摘要: 一、成员函数 wait()、 notify_one() 和 notify_all() 以及 虚假唤醒 的概念 notify_one():任意唤醒一个线程中condition_variable的waitnotify_all():唤醒所有线程中condition_variable的wait 当 m_me 阅读全文
posted @ 2020-06-26 13:40 min_zhi 阅读(351) 评论(0) 推荐(0) 编辑
摘要: 一、单例设计模式共享数据例子 std::mutex myTutex; class UniqueElement { public: static UniqueElement* GetInstance() { if (m_instacne == nullptr) // 双重检测,提高程序运行效率 { s 阅读全文
posted @ 2020-06-26 13:38 min_zhi 阅读(248) 评论(0) 推荐(0) 编辑