网站开发敬请期待dw软件代码大全

news/2025/10/1 8:51:36/文章来源:
网站开发敬请期待,dw软件代码大全,成都网站建设方案服务,赞赏分享wordpress代码阅读导航 引言一、线程池简单介绍二、Linux下线程池代码⭕Makefile文件⭕ . h 头文件✅Task.hpp✅thread.hpp✅threadPool.hpp ⭕ . cpp 文件✅testMain.cpp 三、线程池的优点温馨提示 引言 在Linux下#xff0c;线程池是一种常见的并发编程模型#xff0c;它能够有效地管理… 阅读导航 引言一、线程池简单介绍二、Linux下线程池代码⭕Makefile文件⭕ . h 头文件✅Task.hpp✅thread.hpp✅threadPool.hpp ⭕ . cpp 文件✅testMain.cpp 三、线程池的优点温馨提示 引言 在Linux下线程池是一种常见的并发编程模型它能够有效地管理多个线程提高系统的性能和资源利用率。通过线程池可以实现多生产者多消费者模型有效地处理并发任务提升系统的响应速度和吞吐量。在本文中我们将深入探讨如何在Linux环境下创建线程池以及线程池的实现原理和使用技巧。通过深入理解线程池的概念和应用我们可以更好地应对复杂的并发编程场景从而提升系统的稳定性和性能表现。让我们一起探索Linux下线程池的奥秘为并发编程的世界增添新的色彩 一、线程池简单介绍 线程池是一种并发编程技术用于管理和复用多个线程以提高系统的性能和资源利用率。在线程池中一定数量的线程被预先创建并保存在池中当需要执行任务时从线程池中选择一个空闲的线程来处理任务任务执行完毕后线程将返回到线程池中等待下一个任务。 通过使用线程池可以避免频繁地创建和销毁线程减少了线程创建和销毁的开销同时也控制了并发线程的数量避免系统资源被过度占用。线程池还可以根据系统负载情况动态调整线程数量以更好地适应不同的工作负载。 二、Linux下线程池代码 ⭕Makefile文件 thread_pool:testMain.cppg -o $ $^ -stdc11 -lpthread #-DDEBUG_SHOW clean:rm -f thread_pool这个 Makefile 包含了两个规则一个用于编译名为testMain.cpp的程序并生成名为thread_pool的可执行文件另一个用于清理生成的可执行文件。你可以使用make命令编译程序使用make clean命令清理生成的可执行文件。 ⭕ . h 头文件 ✅Task.hpp #pragma once#include iostream #include string #include functional// 定义函数类型 func_t用于表示可以接受两个整型参数并返回一个整型结果的函数 typedef std::functionint(int, int) func_t;// Task 类表示一个任务 class Task { public:// 默认构造函数Task() {}// 带参数的构造函数初始化任务的成员变量Task(int x, int y, func_t func) : x_(x), y_(y), func_(func){}// 重载 () 运算符实现任务的执行void operator()(const std::string name){// 在控制台输出任务执行的结果std::cout 线程 name 处理完成, 结果是: x_ y_ func_(x_, y_) std::endl;}public:int x_; // 任务的参数 xint y_; // 任务的参数 yfunc_t func_; // 保存任务所需执行的函数 }; ✅thread.hpp #pragma once #include iostream #include string #include cstdio// 定义函数指针类型 fun_t表示可以接受一个 void* 类型参数并返回一个 void* 类型结果的函数指针 typedef void *(*fun_t)(void *);// 线程数据结构用于保存线程的参数和名称 class ThreadData { public:void *args_; // 线程参数std::string name_; // 线程名称 };// 线程类用于创建和管理线程 class Thread { public:// 构造函数初始化线程对象Thread(int num, fun_t callback, void *args) : func_(callback){// 设置线程名称为 Thread-numchar nameBuffer[64];snprintf(nameBuffer, sizeof nameBuffer, Thread-%d, num);name_ nameBuffer;// 设置线程数据的参数和名称tdata_.args_ args;tdata_.name_ name_;}// 启动线程void start(){pthread_create(tid_, nullptr, func_, (void*)tdata_);}// 等待线程结束void join(){pthread_join(tid_, nullptr);}// 获取线程名称std::string name(){return name_;}// 析构函数~Thread(){}private:std::string name_; // 线程名称fun_t func_; // 线程执行的函数指针ThreadData tdata_; // 线程数据pthread_t tid_; // 线程 ID }; ✅threadPool.hpp #pragma once #include iostream #include vector #include string #include queue #include unistd.h #include thread.hpp// 互斥锁类封装了互斥锁的操作 class Mutex { public:Mutex(pthread_mutex_t *mtx) : pmtx_(mtx){}void lock(){pthread_mutex_lock(pmtx_);}void unlock(){pthread_mutex_unlock(pmtx_);}~Mutex(){}private:pthread_mutex_t *pmtx_; };// RAII风格的加锁方式构造时加锁析构时解锁 class lockGuard { public:lockGuard(pthread_mutex_t *mtx) : mtx_(mtx){mtx_.lock();}~lockGuard(){mtx_.unlock();}private:Mutex mtx_; };// 默认线程数 const int g_thread_num 3;// 线程池类模板 template class T class ThreadPool { public:// 获取互斥锁指针pthread_mutex_t *getMutex(){return lock;}// 判断任务队列是否为空bool isEmpty(){return task_queue_.empty();}// 等待条件变量void waitCond(){pthread_cond_wait(cond, lock);}// 获取待执行任务T getTask(){T t task_queue_.front();task_queue_.pop();return t;}private:// 构造函数初始化线程池ThreadPool(int thread_num g_thread_num) : num_(thread_num){pthread_mutex_init(lock, nullptr);pthread_cond_init(cond, nullptr);for (int i 1; i num_; i){threads_.push_back(new Thread(i, routine, this));}}ThreadPool(const ThreadPoolT other) delete;const ThreadPoolT operator(const ThreadPoolT other) delete;public:// 获取线程池单例static ThreadPoolT *getThreadPool(int num g_thread_num){if (nullptr thread_ptr){lockGuard lockguard(mutex);if (nullptr thread_ptr){thread_ptr new ThreadPoolT(num);}}return thread_ptr;}// 启动线程池中的线程void run(){for (auto iter : threads_){iter-start();std::cout iter-name() 启动成功 std::endl;}}// 线程执行的函数static void *routine(void *args){ThreadData *td (ThreadData *)args;ThreadPoolT *tp (ThreadPoolT *)td-args_;while (true){T task;{lockGuard lockguard(tp-getMutex());while (tp-isEmpty())tp-waitCond();task tp-getTask();}task(td-name_);}}// 向任务队列中添加任务void pushTask(const T task){lockGuard lockguard(lock);task_queue_.push(task);pthread_cond_signal(cond);}// 析构函数销毁线程池~ThreadPool(){for (auto iter : threads_){iter-join();delete iter;}pthread_mutex_destroy(lock);pthread_cond_destroy(cond);}private:std::vectorThread * threads_; // 线程对象数组int num_; // 线程数量std::queueT task_queue_; // 任务队列static ThreadPoolT *thread_ptr; // 线程池单例指针static pthread_mutex_t mutex; // 线程池单例的互斥锁pthread_mutex_t lock; // 线程池内部使用的互斥锁pthread_cond_t cond; // 线程池内部使用的条件变量 };// 静态成员初始化 template typename T ThreadPoolT *ThreadPoolT::thread_ptr nullptr;template typename T pthread_mutex_t ThreadPoolT::mutex PTHREAD_MUTEX_INITIALIZER; ⭕ . cpp 文件 ✅testMain.cpp #include threadPool.hpp // 包含线程池头文件 #include Task.hpp // 包含任务类的头文件 #include ctime #include cstdlib #include iostream #include unistd.hint main() {srand((unsigned long)time(nullptr) ^ getpid()); // 初始化随机数种子// 获取线程池单例并运行线程ThreadPoolTask::getThreadPool()-run();while(true){// 生产任务的过程制作任务的时候要花时间int x rand() % 100 1; // 随机生成一个范围在1到100之间的整数xusleep(7721); // 模拟制作任务需要的时间int y rand() % 30 1; // 随机生成一个范围在1到30之间的整数yTask t(x, y, [](int x, int y) - int { // 创建任务对象t执行加法操作return x y;});std::cout 制作任务完成: x y ? std::endl; // 输出任务信息// 推送任务到线程池中ThreadPoolTask::getThreadPool()-pushTask(t);sleep(1); // 暂停一秒钟}return 0; }这段代码主要实现了一个简单的任务生产者不断地生成任务并将任务推送到线程池中执行。 三、线程池的优点 线程池能够有效地管理线程提高系统的性能和响应速度同时简化了线程管理的复杂性是多线程编程中常用的一种技术。下面是它的优点 提高性能线程池可以减少线程创建和销毁的开销通过重用线程避免了频繁地创建和销毁线程所带来的性能损耗。 控制并发度线程池可以限制同时执行的线程数量从而控制系统的并发度防止因为过多线程导致系统资源被耗尽。 提高响应速度由于线程池中的线程已经创建好并处于就绪状态当任务到达时可以立即执行从而减少了任务等待执行的时间提高了系统的响应速度。 简化线程管理线程池封装了线程的创建、销毁、调度等操作简化了线程管理的复杂性提高了代码的可维护性。 控制资源占用线程池可以限制系统中同时存在的线程数量从而控制系统对资源如内存、CPU的占用防止资源被耗尽导致系统崩溃。 总而言之线程池提供了一种高效、可控的线程管理机制适用于处理大量并发任务的场景是提高系统性能和响应速度的重要工具之一。 温馨提示 感谢您对博主文章的关注与支持如果您喜欢这篇文章可以点赞、评论和分享给您的同学这将对我提供巨大的鼓励和支持。另外我计划在未来的更新中持续探讨与本文相关的内容。我会为您带来更多关于Linux以及C编程技术问题的深入解析、应用案例和趣味玩法等。如果感兴趣的话可以关注博主的更新不要错过任何精彩内容 再次感谢您的支持和关注。我们期待与您建立更紧密的互动共同探索Linux、C、算法和编程的奥秘。祝您生活愉快排便顺畅

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

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

相关文章

网站建设用图工作室网站建设的意义

时间限制 :1000 ms 内存限制:65536 KB 在一个旧式的火车站旁边有一座桥,其桥面可以绕河中心的桥墩水平旋转。一个车站的职工发现桥的长度最多能容纳两节车厢,如果将桥旋转180度,则可以把相邻两节车厢的位…

网页设计公司建网站网站设计南充建设工程信息网

如果你是一个硬件系统管理员或者Linux工程师,你可能会记得大多数Linux命令行技巧。下面的这些Linux命令行技巧通常不被Linux用户所使用。 1.使用pgrep快速查找一个PID pgrep遍历目前正在运行的进程然后列出符合查找规则的进程ID(PID)。 pg…

2025木方厂家权威推荐榜:实力工厂与优质供应之选

在建筑行业持续升级的背景下,木方作为基础建材的需求呈现出专业化、品质化的发展趋势。随着绿色建筑理念的普及和施工标准的提高,市场对木方产品的稳定性、耐久性和环保性能提出了更高要求。不同规模的工程项目在选材…

2017网站开发合同下载页面设计是什么专业

爱剪辑学习委员会提醒您:道路千万条,学习第一条。教程不学会,制作两行泪。今天教大家制作炫彩的动态标题文字特效,3步即可快速学会,让你立马不再流泪。爱剪辑官网下载:http://www.aijianji.com/爱剪辑LOGO效…

LoRa/LoRaWAN技术手册

第一部分 快速入门 第一章 第二部分 基础知识 第三部分 设备 第四部分 基站 第五部分 ChirpStack与App 第六部分 运维

便宜的 VPS

hostsailor https://clients.hostsailor.com/aff.php?aff=1356

2025南通宠物医院权威推荐榜:专业诊疗与暖心服务口碑之选

2025南通宠物医院权威推荐榜:专业诊疗与暖心服务口碑之选 在宠物医疗行业蓬勃发展的当下,南通地区的宠物医疗服务体系日趋完善。随着养宠人群对宠物健康重视程度的提升,专业诊疗技术与人性化服务已成为宠物医院发展…

企业网站建设设计公司现在c 做网站用什么

文章目录 📝 Notepad 简介🔧 主要特点打开.c文件示意高亮语法展示全局替换功能展示 📝 Notepad 简介 Notepad 是一款 免费的开源文本编辑器和源代码编辑器,运行在 Windows 系统上。 它是对 Windows 自带“记事本”的增强版本&…

高等数学基础知识 - 实践

高等数学基础知识 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", &q…

网站制作是什么公司eclipse 网站开发

摘要: MaxCompute(原ODPS)是阿里云自主研发的具有业界领先水平的分布式大数据处理平台, 尤其在集团内部得到广泛应用,支撑了多个BU的核心业务。 MaxCompute除了持续优化性能外,也致力于提升SQL语言的用户体验和表达能力…

深入解析:随时随地学算法:Hello-Algo与cpolar的远程学习方案

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

【MySQL】MySQL索引失效场景全面解析与优化指南 - 实践

【MySQL】MySQL索引失效场景全面解析与优化指南 - 实践2025-10-01 08:31 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; d…

环保局网站建设方案云智网站建设公司

3月15日,测吧(北京)科技有限公司(以下简称测吧)项目总监王雪冬来到计算机学院对校企合作、学生就业、学生竞赛等一系列工作进行了深入研讨,并向计算机学院颁发了优秀组织单位和优秀指导老师奖。会议由黄曼绮…

比较简洁大方的网站做外账经常进哪几个网站

本文详细介绍了烧录OpenHarmony系统到开发板的操作流程。从基础的硬件准备和软件环境设置入手,详细说明了如何配置开发环境、构建系统镜像等过程,详细描述了烧录过程中的关键步骤,以及如何使用专用工具将OpenHarmony系统镜像传输到开发板。同…

建站之星服务器网站信息平台建设方案

了解int和Integer的区别 int是Java的基本数据类型,用于表示整数值。Integer是int的包装类,它是一个对象,可以包含一个int值并提供一些额外的功能。 Java集合框架中的集合类(如List、Set、Map)只能存储对象,…

绵阳网站改版深圳海外医疗网站建设

1.TIDB和MySQL对比 对比内容MySQLTiDB架构设计一个传统的单机数据库系统,采用主从复制和分区表等方式来实现水平扩展一个分布式的 NewSQL 数据库,采用分布式存储和分布式事务等技术,支持水平扩展和高可用性事务支持 InnoDB 存储引擎来支持事…

一文掌握 Apache SeaTunnel 构建优秀的系统与分发基础架构

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

【JavaScript 性能优化实战】第六篇:性能监控与自动化优化 - 指南

【JavaScript 性能优化实战】第六篇:性能监控与自动化优化 - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "…