摘要: 先上代码,声明部分 windows的sleep和Linux的sleep不一样,所以只好#ifdef ,大概是Linux: usleep(微妙) sleep(秒) windows:Sleep(毫秒),只有这部分必须要涉及平台特性 构造和析构: 构造函数的一个要点:必须要先把一些东西都创建好了,再启动线 阅读全文
posted @ 2018-12-04 11:39 戳戳熊 阅读(324) 评论(0) 推荐(0) 编辑
摘要: 上面部分是工作者线程,循环取任务,try执行,条件变量阻塞,push任务的时候会唤醒一个,而且本身就会有执行完发现有任务,继续执行不等待的,所以不会有明明有任务,却线程都在等待的情况 值得一说的一点是,由于map不管是用哈希表,还是红黑树,对单独一个节点的内容值操作都不影响其他节点,故这里用读写锁去 阅读全文
posted @ 2018-12-04 11:28 戳戳熊 阅读(391) 评论(0) 推荐(0) 编辑
摘要: 第二部分是关于线程池主要两个操作: 1.提交一个任务 2.获取已提交任务的结果 提交任务函数 传入一个函数指针,一个参数void* ,以及是否需要查询返回值,如果不需要返回值效率会高些,如果选择要查询结果,但是任务完成后没有获取结果的话,会一直占用空间 如果是不需要返回值返回1,否则返回key,失败 阅读全文
posted @ 2018-12-04 11:00 戳戳熊 阅读(735) 评论(0) 推荐(0) 编辑
摘要: 线程池的思想早有耳闻,中间也涉及好多内容,回过头来重新设计一下线程池. 使用者视角: 1.创建一个线程池对象, ThreadPool ThPool(int minThreads); //同时会创建一个管理者线程,负责维护线程池,可以通过算法动态调度增加或减少线程 2.加入一个任务 int ThPoo 阅读全文
posted @ 2018-12-04 10:41 戳戳熊 阅读(976) 评论(0) 推荐(0) 编辑