6.10 线程池及gdb调试多线程

news2024/11/17 12:48:02

线程池概念和使用
概念:
通俗的讲就是一个线程的池子,可以循环的完成任务的一组线程集合

必要性:
我们平时创建一个线程,完成某一个任务,等待线程的退出。但当需要创建大量的线程时,假设T1为创建线程时间,T2为在线程任务执行时间,T3为线程销毁时间,当 T1+T3 > T2,这时候就不划算了,使用线程池可以降低频繁创建和销毁线程所带来的开销,任务处理时间比较短的时候这个好处非常显著。

线程池的基本结构:
1 任务队列,存储需要处理的任务,由工作线程来处理这些任务
2 线程池工作线程,它是任务队列任务的消费者,等待新任务的信号

 线程池的实现:
1创建线程池的基本结构:
任务队列链表
typedef struct Task;
线程池结构体
typedef struct ThreadPool;
2.线程池的初始化:
pool_init()
{
创建一个线程池结构
实现任务队列互斥锁和条件变量的初始化
创建n个工作线程
}
3.线程池添加任务
   pool_add_task
{
    判断是否有空闲的工作线程
给任务队列添加一个节点
    给工作线程发送信号newtask
}
4.实现工作线程
   workThread
{
while(1){
   等待newtask任务信号
   从任务队列中删除节点
   执行任务
}
}
5.线程池的销毁
   pool_destory
{
删除任务队列链表所有节点,释放空间
删除所有的互斥锁条件变量
删除线程池,释放空间
}

编译错误:
error: ‘ThreadPool {aka struct ThreadPool}’ has no member named ‘head’
意义:ThreadPool 结构体没有head这个成员。
解决:检查是否拼写错误。

error: too few arguments to function ‘pthread_mutex_init’
意思:pthread_mutex_init这个函数参数少了
解决:检查函数的参数,添加对应的参数

线程的GDB调试:
显示线程
info thread 
切换线程
thread id

GDB为特定线程设置断点
break location thread id

GDB设置线程锁,
set scheduler-locking on/off
on:其他线程会暂停。可以单独调试一个线程

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

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

相关文章

DAY 74 ELK企业级日志分析系统

ELK 简介 ELK平台是一套完整的日志集中处理解决方案,将 ElasticSearch、Logstash 和 Kiabana 三个开源工具配合使用, 完成更强大的用户对日志的查询、排序、统计需求 ELK各组件介绍 ElasticSearch: 是基于Lucene(一个全文检索引…

大麦一键生成订单截图 大麦生成购票链接

一键生成订单截图,生成购票链接 已对接支付 下载程序:https://pan.baidu.com/s/16lN3gvRIZm7pqhvVMYYecQ?pwd6zw3

idea设置@Author文件头注释

背景:做项目开发,每个文件的文件头现在看着特别难受,想着弄着统一一些吧 第一步:选择intelliJ IDEA,然后选择settings 第二步:选择Editor,再选择File and Code Templates 第三步:选择Includes,…

API管理的正确姿势--API Gateway

淘宝API管理的正确姿势--API Gateway 编者按: 数字化生态,以创新客户体验为核心,所有我们身边能感知到的变化都来自于渐近的创新。这些创新需要试错,需要不断的升级,并且创新往往与我们熟知的功能分离开来分别呈现。微…

企业级信息系统开发讲课笔记4.9 Thymeleaf模板引擎

文章目录 零、学习目标一、Spring Boot支持的视图技术二、Thymeleaf基本语法1、Thymeleaf常用标签2、Thymeleaf主要语法3、Thymeleaf内置对象4、Thymeleaf模板基本配置 三、Spring Boot整合Thymeleaf1、创建Spring Boot项目ThymeleafDemo2、在全局配置文件里配置Thymeleaf属性3…

简化本地Feign调用,老手教你这么玩

原创:微信公众号 码农参上,欢迎分享,转载请在文章头部保留出处,侵权必究 哈喽大家好啊,我是Hydra。 在平常的工作中,OpenFeign作为微服务间的调用组件使用的非常普遍,接口配合注解的调用方式突…

ChatGPT涉及的法律风险综述

ChatGPT(Chat Generative Pre-trained Transformer),是OpenAI研发的聊天机器人程序,于2022年11月30日发布。从发布的那一刻至今,ChatGPT一直受到各界的广泛关注。作为人工智能技术驱动的自然语言处理工具,它…

一种简单的文本监督语义分割框架

文章目录 A Simple Framework for Text-Supervised Semantic Segmentation摘要本文方法动机Locality-Driven Alignment(LoDA)SimSeg Framework 实验结果 A Simple Framework for Text-Supervised Semantic Segmentation 摘要 文本监督语义分割是一个新…

音频转文字工具都有哪些?分享三款好用的录音转文字软件

对于许多人来说,录音已经成为了记录重要信息的常用方法。但是,在实际应用中,往往会遇到如何将这些录音内容转换为文字记录的挑战。这是一个备受关注的问题。那么,录音如何转为文字呢?这篇文章就来给你推荐几个非常好用…

yolov5 的 mAP 和 召回率很低,但是精准率 AP还可以

可能的原因: 标注问题, 检查图片没有txt,导致有正样本的图片,被认为是背景,召回率降低。是否是中文路径, opencv这个cv2.imread不能读取中文图像。 改成这样就行。

预约按摩系统平台开发,常见问题解答

预约按摩平台系统常见问题: 预约流程:按摩系统提供简单易用的预约流程,用户只需要提供必要的信息即可完成预约,同时也可以随时修改或取消预约。 付款方式:按摩系统支持线上和线下支付方式,其中线上支付采用…

使用python-docx在文档中插入图片

在文档中添加图片的方法如下: from docx import Document from docx.shared import Inches, Cmdocument Document() document.add_heading(大标题, 0)# 新建word文档 p document.add_paragraph("下面插入图片:")document.add_picture(test_…

电力监控系统在电力系统中的应用

安科瑞虞佳豪 一年一度高考和中考即将来临,日前,国网咸丰县供电公司积极有序开展保电工作,全面进入“高考保供电”模式。 为全力保障高考期间供电安全,国网咸丰县供电公司将大水线供电线路采取分流运输方式,将除春晖…

IDEA之Mybatis Log Plugin的使用

Mybatis Log Plugin是一个用于记录Mybatis SQL语句执行情况的插件,帮助开发人员方便地追踪和分析Mybatis执行的SQL语句,从而更容易地找出程序中存在的问题和优化SQL语句的性能。 Mybatis Log Plugin可以以日志的形式记录Mybatis执行的SQL语句、执行时间…

win批量取消快速访问固定

win批量取消快速访问固定

Hibernate框架【五】——基本映射——多对多映射

系列文章目录 Hibernate框架【三】——基本映射——一对一映射 Hibernate框架【四】——基本映射——多对一和一对多映射 基本映射——多对多映射 系列文章目录前言一、多对多映射是什么?二、hibernate多对多关联映射(单向)1.实体结构2.示意…

Flink Table/Sql自定义Kudu Sink实战(其它Sink可参考)

目录 1. 背景2. 原理3. 通过Trino创建Kudu表4. FlinkKuduTableSinkProject项目4.1 pom.xml4.2 FlinkKuduTableSinkFactory.scala4.3 META-INF/services4.4 FlinkKuduTableSinkTest.scala测试文件 5. 查看Kudu表数据 1. 背景 使用第三方的org.apache.bahir flink-connector-ku…

​2023年湖北企业人力资源管理师报考条件是什么?启程别告诉你

2023年湖北企业人力资源管理师报考条件是什么?启程别告诉你 2019年国家就取消了企业人力资源管理师国家职业资格考试,现在是改革为职业技能等级认证,由人社部监管的第三方组织机构组织考试和颁发证书,那改革后的企业人力资源管理师…

创建镜像-dockerfile

Docker 镜像的创建 创建镜像有三种方法: 1.基于已有镜像创建、 2.基于本地模板创建 3.基于Dockerfile创建。 基于现有镜像创建 首先启动一个镜像,在容器里做修改 docker create -it centos:7 /bin/bash然后将修改后的容器提交为新的镜像&#xff…

在JavaScript中的数据结构(队列)

文章目录 什么是队列?创建队列新建队列队列可用的方法队列添加元素队列移除元素队列查看元素查看队列头元素检查队列是否为空检查队列的长度打印队列元素 完整队列代码 循环队列优先队列是什么?总结 什么是队列? 当我们在浏览器中打开新标签…