多线程的虚假唤醒理解

虚假唤醒在多线程环境中,在竞争资源的时候,有时候拿到了锁,却发现资源没了,这可能就是使用了条件等待产生的一个惊群效应。pthread_cond_signal将所有的pthread_cond_wait线程都唤醒了,但是只有个别线程竞争到了资源,没有竞争资源的线程就是属于虚假唤醒的线程。对于虚假唤醒的线
c/c++ 程序设计 2020年11月17日 47次浏览

内存池设计

内存池在日常的写代码中,经常有需要申请内存的时候,但是频繁的申请释放会特别的浪费时间,于是衍生了内存池,由内存池帮忙管理内存,内存池帮忙统一释放,免去了用户的频繁释放,申请内存只需要从内存池中已经申请好的内存中取出,如果没有大于需求的内存,则内存池再去申请一块回来。内存池增强了程序员对内存碎片话的管
c/c++ 程序设计 linux 2020年06月26日 192次浏览

互斥锁,条件等待,读写锁,自旋锁,原子操作,CAS操作

互斥锁(mutex)用在执行长的代码块效率较高,如果只是执行一条少的指令,速度不如自旋锁和原子锁。如果被锁住,线程回去休眠等待,不占用系统资源。由于共享区域执行时间长,所以速度快。API:#include<pthread.h>//动态初始化:intpthread_mutex_init(p
工具 c/c++ 程序设计 linux 2020年06月09日 185次浏览

线程池的封装实现

线程常用函数创建线程函数———pthread_create函数#include<pthread.h>intpthread_create(pthread_t*thread,constpthread_arrt_t*attr,void*(*start_routine)(void*),void*
c/c++ 程序设计 2020年06月08日 218次浏览

异步http客户端

做法流程1.init_contexta.pthread_createb.epoll_create2.uninit_context()a.pthread_cannelb.close3.commit()a.准备socketb.connectc.protocol;dns/http/redis/mysqld
c/c++ 程序设计 linux 2020年06月07日 196次浏览

单例

单例概念:保证一个类仅有一个实例,并提供一个该实例的全局访问点。--《设计模式》GoF使用场景DBPool读取配置文件常见写法饿汉式单例懒汉式单例双锁型单例模式线程安全型单例模式结构要点总结Singleton模式中实例构造器可以设置为protected以允许子类派生。Singleton模式一般不要支
c/c++ 程序设计 2020年06月01日 188次浏览

工厂模式

工厂模式概念:定义一个用于创建对象的接口,让子类决定实例化哪一个类。FactoryMethod使得一个类的实例化延迟(目的:解耦,手段:虚函数)到子类。--《设计模型》GoF结构要点总结FactoryMethod模式用于隔离类对象的使用者和具体类型之间的耦合关系。面对一个经常变化的具体类型,紧耦合关
c/c++ 程序设计 2020年06月01日 187次浏览

观察者模式

观察者模式概念:定义对象间的一种一对多(变化)的依赖关系,以便当一个对象(subject)的状态发生改变时,所有依赖于它的对象都得到通知并自动更新。--《设计模式》GoF结构要点总结使用面向对象的抽象,Observer模式使得我们可以独立地改变目标与观察者,从而使二者之间的依赖关系达到松耦合。目标发
c/c++ 程序设计 2020年06月01日 193次浏览