Linux-线程池

文章目录

  • 前言
  • 一、线程池是什么?
  • 二、示例代码


前言

线程池主要是对之前内容的一个巩固,并且初步了解池化概念。


一、线程池是什么?

线程池就是提前开辟好一块空间,随时准备创造新线程来完成任务,可以理解为用空间来换时间,具体实现看以下示例代码。

二、示例代码

#include <pthread.h>
#include <cstdio>
#include <cstdlib>
#include "lockGuard.hpp"
#include "log.hpp"
const int default_ThreadNum = 5;
template <class T>
class ThreadPool
{public:ThreadPool(int thread_num = default_ThreadNum):_thread_num(thread_num){pthread_mutex_init(&_mutex,nullptr);pthread_cond_init(&_cond,nullptr);for (int i = 1; i <= _thread_num; i++){char nameBuffer[128];snprintf(nameBuffer, sizeof nameBuffer, "Thread %d", i);_threadPool.push_back(new Thread(nameBuffer, routine, (void *)this));logMessage(NORMAL, "%s 线程创建成功!", nameBuffer);}}bool isEmpty(){return _task_queue.empty();}void waitCond(){pthread_cond_wait(&_cond, &_mutex);}pthread_mutex_t &getMutex(){return _mutex;}T getTask(){T task = _task_queue.front();_task_queue.pop();return task;}std::vector<Thread> &getpool(){return _threadPool;}static void *routine(void *args){ThreadData *td = (ThreadData *)args;ThreadPool<T> *tp = (ThreadPool<T> *)td->_args;while (1){T task;{lockGuard lg(&tp->getMutex());while (tp->isEmpty())tp->waitCond();task = tp->getTask();}task(td->_name);}}void run(){for(auto& thread : _threadPool){thread->start();}}void pushTask(const T &task){lockGuard lg(&_mutex);_task_queue.push(task);pthread_cond_signal(&_cond);}~ThreadPool(){for(auto& iter: _threadPool){iter->join();delete iter;}pthread_mutex_destroy(&_mutex);pthread_cond_destroy(&_cond);}private:int _thread_num;std::vector<Thread*> _threadPool;std::queue<T> _task_queue;pthread_mutex_t _mutex;pthread_cond_t _cond;
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/18197.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

攻击同学网络,让同学断网

技术介绍&#xff1a;ARP欺骗 ARP欺骗&#xff08;ARP spoofing&#xff09;是一种网络攻击技术&#xff0c;它通过伪造ARP&#xff08;地址解析协议&#xff09;响应包来欺骗目标设备&#xff0c;使其将网络流量发送到攻击者指定的位置。具体操作步骤如下&#xff1a; 攻击者…

win/mac 崩溃内存泄漏问题分析

内存泄露排查 mac: xcode自带工具 参考 leak AddressSanitize windows: vld dmp排查 windows dmp 安装 WinDbg - Windows drivers | Microsoft Learn 本地或者远端均可用vs排查 mac dmp 本地查看控制层生成的.crash文件 远端的使用google breakpad client工具解析minidu…

C#--Mapster(高性能映射)用法

1.Nuget安装Mapster包引用 2.界面XAML部分 <Window x:Class"WpfApp35.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d"http://schemas.m…

buffer 越大传输效率越低

在计算机科学和网络通信中&#xff0c;Buffer&#xff08;缓冲区&#xff09;扮演着至关重要的角色。然而&#xff0c;关于Buffer的大小与传输效率之间的关系&#xff0c;往往存在一个普遍的误解&#xff0c;即认为Buffer越大&#xff0c;传输效率就越高。事实上&#xff0c;过…

JQuery 入门

一、jQuery 概述 1、JavaScript 库 仓库:可以把很多东西放到这个仓库里面。找东西只需要到仓库里面查找就可以 JavaScript 库&#xff1a;即library&#xff0c;是一个封装好的特定的集合&#xff08;方法和函数&#xff09;。从封装一大堆函数的角度理解库&#xff0c;就是在…

零基础学Java第二十五天之Lambda表达式

Lambda表达式 简介 Lambda是一个匿名函数(方法)&#xff0c; 允许把函数作为一个方法的参数 。利用Lambda表达式可以写出更简洁、更灵活的代码。作为一种更紧凑的代码风格&#xff0c;使Java的语言表达能力得到了提升。一般都是优化匿名内部类 基础语法 无参数、无返回值的抽…

住宅IP?

住宅IP是由主要运营商&#xff08;如电信、移动、联通等&#xff09;为用户开通的宽带业务所分配的IP地址。这些IP地址是真实的、具有实际位置的IP&#xff0c;与普通用户的设备IP和宽带网络IP一致。它们不是连续的&#xff0c;而是散点分布&#xff0c;这使得它们在使用时更加…

ModuleNotFoundError: No module named ‘simpleui‘

如果你在使用 Django 并遇到 No module named simpleui 错误,这意味着你的项目中没有安装 simpleui 模块。simpleui 是一个用于 Django 的第三方库,可以美化 Django 的管理后台。 要解决这个问题,你需要安装 simpleui 模块。下面是安装和配置 simpleui 的步骤: 1. 安装 s…

基于MyBatisPlus表结构维护工具

SuperTable表结构维护工具 一、简述 用于同步表实体与数据库表结构&#xff0c;同步建表、删改字段、索引&#xff0c;种子数据的工具… 一、开发环境 JDK&#xff1a;JDK8SpringBoot&#xff1a;2.7.2MyBatisPlus: 3.5.6MySQL: 5.7其他依赖&#xff1a;略 二、特性 表结…

论文阅读笔记:Task-Customized Mixture of Adapters for General Image Fusion

论文阅读笔记&#xff1a;Task-Customized Mixture of Adapters for General Image Fusion 1 背景2 创新点3 方法4 模块4.1 任务定制混合适配器4.2 提示生成4.3 提示驱动融合4.4 互信息正则化MIR4.5 任务定制化损失 5 实验5.1 VIF任务5.2 MEF任务5.3 MFF任务5.4 消融实验5.5 性…

json/excel文件上传下载工具方法汇总

文章目录 浏览器下载json文件浏览器下载excel文件【Workbook】浏览器导入json文件【ObjectMapper】浏览器导入excel文件【Workbook】ResourceLoader读取类路径下单个jsonResourceLoader读取类路径下所有json文件 浏览器下载json文件 Operation(summary "设备模型导出(带分…

java源码,MES系统源码,企业生产过程执行系统源码,计划排产管理、生产调度管理、库存管理、质量管理

企业级MES系统源码&#xff0c;生产管理系统源码 MES制造企业生产过程执行系统&#xff0c;是一套面向制造企业车间执行层的生产信息化管理系统。MES可以为企业提供包括制造数据管理、计划排产管理、生产调度管理、库存管理、质量管理、工作中心、设备管理、工具工装管理、采购…

国内半导体龙头企业的自动化转型之旅

在当今高速发展的科技时代&#xff0c;半导体行业正迎来前所未有的挑战与机遇。位于此浪潮前端的&#xff0c;是国内一家领先的半导体集成电路封装测试企业。凭借其规模和创新实力&#xff0c;该公司不仅在国内市场名列前茅&#xff0c;更是在全球半导体行业中占据了一席之地。…

死锁的四个必要条件

死锁的四个必要条件如下&#xff1a; 互斥条件&#xff08;Mutual Exclusion&#xff09;&#xff1a;资源是独占的&#xff0c;即在同一时间内一个资源只能被一个进程或线程所使用&#xff0c;其他进程或线程无法访问该资源。 请求与保持条件&#xff08;Hold and Wait&#…

钢丝绳输送带详细介绍

钢丝绳输送带&#xff1a;工业巨无霸&#xff0c;助力物流新篇章 在现代化的物流运输领域&#xff0c;钢丝绳输送带以其独特的优势&#xff0c;成为了工业界的巨无霸。它以其强大的承载能力、稳定的运行性能&#xff0c;以及长寿命的特点&#xff0c;赢得了众多行业的青睐。今…

ArcGIS基本操作-常用的空间分析工具梳理

ArcGIS空间分析工具使用 如果我们在进行科研时需要将研究区地形地貌作为一项指标的话&#xff0c;将可能遇到坡度、坡向、地形起伏度、地表切割深度等因子计算&#xff0c;下面我向大家介绍如何利于ArcGIS软件的空间分析工具&#xff0c;基于高程数据&#xff0c;分析重庆市的…

双例集合(一)——Map接口

双例集合简介 在JDK中&#xff0c;容器可以分为单例集合和双例集合两大类&#xff0c;单例集合用接口Collection来定义其存储特征&#xff0c;而双例集合采用的是Map接口来定义它的存储特征&#xff0c;Map接口与Collection接口是并行的关系。 在具体说明Map接口的作用之前我们…

Javascript--词法作用域

词法作用域 词法阶段 大部分标准化语言编辑器的第一个工作阶段叫做词法化&#xff0c;词法化会对源代码中的字符进行检查&#xff0c;如果是有状态的解析过程&#xff0c;还会赋予单词语义。 简单来说&#xff0c;词法作用域就是在词法阶段的作用域&#xff0c; function fo…

错误模块路径: ...\v4.0.30319\clr.dll,v4.0.30319 .NET 运行时中出现内部错误,进程终止,退出代码为 80131506。

全网唯一解决此BUG的文章&#xff01;&#xff01;&#xff01; 你是否碰到了以下几种问题&#xff1f;先说原因解决思路具体操作1、首先将你C:\Windows\Microsoft.NET\文件夹的所有者修改为你当前用户&#xff0c;我的是administrator。2、修改当前用户权限。3、重启电脑4、删…

前端Vue小兔鲜儿电商项目实战Day01

一、项目介绍 1. 项目技术栈 2. 项目规模 3. 项目亮点 4. 课程安排 5. 适合人群 二、Vue3组合式API体验 1. 通过一个Counter案例体验Vue3新引入的组合式API ①Vue2的代码 <template><button click"addCount"> {{ count }}</button> </templ…