首页 > 其他分享 >线程池(待补齐)

线程池(待补齐)

时间:2024-06-11 09:00:08浏览次数:24  
标签:task thread void 线程 include 补齐 pool

#include <stdio.h>
#include <stdbool.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <strings.h>
#include <errno.h>
#include <pthread.h>

#define MAX_WAITING_TASKS 1000 // 处于等待状态的线程数量最大为1000
#define MAX_ACTIVE_THREADS 20  // 活跃的线程数量

// 任务结点  单向链表的节点,类型
struct task
{
	void *(*do_task)(void *arg); // 任务函数指针  指向线程要执行的任务  格式是固定的
	void *arg;					 // 需要传递给任务的参数,如果不需要,则NULL

	struct task *next; // 指向下一个任务结点的指针

};

// 线程池的管理结构体
typedef struct thread_pool
{
	pthread_mutex_t lock; // 互斥锁
	pthread_cond_t cond;  // 条件量

	bool shutdown;
	/*是否需要销毁线程池,用于指示线程池是否处于销毁状态。它的作用是在线程池需要被销毁时,向线程池中的工作线程发出信号,告知它们停止接受新的任务,并逐渐退出。具体来说,当 shutdown 标记被设置为 true 时,线程池将不再接受新的任务提交,但会继续执行已经提交的任务,直到所有任务都执行完毕。一旦线程池中的任务执行完毕,工作线程就会逐个退出,释放相关资源,最终销毁整个线程池。*/
	 
	struct task *task_list; // 用于存储任务的链表
	 
	pthread_t *tids; // 用于记录线程池中线程的ID
	 
	unsigned max_waiting_tasks; // 线程池中线程的数量最大值
	unsigned waiting_tasks;		// 处于等待状态的线程数量
	unsigned active_threads;	// 正在活跃的线程数量

} thread_pool;

// 初始化线程池
bool init_pool(thread_pool *pool, unsigned int threads_number);

// 向线程池中添加任务
bool add_task(thread_pool *pool, void *(*do_task)(void *arg), void *task);

// 先线程池中添加线程
int add_thread(thread_pool *pool, unsigned int additional_threads_number);

// 从线程池中删除线程
int remove_thread(thread_pool *pool, unsigned int removing_threads_number);

// 销毁线程池
bool destroy_pool(thread_pool *pool);

// 任务函数
void *routine(void *arg);

标签:task,thread,void,线程,include,补齐,pool
From: https://www.cnblogs.com/zeratul/p/18241464

相关文章

  • 线程池
    //定义任务函数,用于模拟需要执行的任务void*mytask(void*arg){intn=(int)arg;//输出任务信息和需要花费的时间printf("[%u][%s]==>jobwillbedonein%dsec...\n",(unsigned)pthread_self(),__FUNCTION__,n);sleep(n);//模拟任务执行时间//输......
  • IO进程线程(十一)进程间通信 消息队列
    文章目录一、IPC(Inter-ProcessCommunication)进程间通信相关命令:(一)ipcs---查看IPC对象(二)获取IPC键值(三)删除IPC对象的命令(四)获取IPC键值的函数1.函数定义2.使用示例二、消息队列(一)特点(二)相关API1.创建或获取一个消息队列2.向消息队列中写消息3.在消息队列中......
  • IO进程线程(十二)进程间通信 共享内存 信号灯集
    文章目录一、共享内存sharedmemory(shm)(一)特点(二)相关API1.创建共享内存2.映射共享内存到当前的进程空间3.取消地址映射4.共享内存控制(三)使用示例(四)属性二、信号灯集---控制进程间同步(一)特点(二)相关API1.创建一个信号灯集2.信号灯集控制函数3.信号灯集的操作函......
  • 记一次锁使用不当导致Dubbo线程阻塞问题
    背景线上环境一个后台项目,提供基于dubbo实现的事件分发服务,最近突然出现心跳超时。问题分析检查内存是否溢出jstat-gcutil81661000意料之中,内存正常,因为内部有接入内存溢出告警,如果是内存溢出应该有收到通知,但是这次没有溢出通知。查看线程栈jstack-l8166发现有大......
  • 线程池原理及c语言实现线程池
    线程池线程池是一种多线程处理机制,其主要目的是提高系统资源利用率、降低系统资源消耗,并通过控制并发线程数量来优化性能。以下是关于线程池的详细解释:定义:线程池是一种线程使用模式,它维护着一组线程,这些线程等待监督管理者分配可并发执行的任务。通过将任务添加到队列中,并......
  • python实现自定义线程池
    线程池ThreadPool对象的几个关键方法:get_idle_num():获得当前空闲线程的数量submit(task:callable):把一个任务(实际上就是一个函数)提交到线程池中执行.如果没有空闲线程则阻塞.wait_idle():阻塞,直到有空闲线程stop():停止线程池中的所有线程.(注意:非强制停止,......
  • 第1讲:进程和线程
    扫盲课。对Linux系统下,进程和线程的基本概念和对比进行阐述。一、进程进程是处于执行期的程序及相关资源的总称。操作系统为进程提供两种虚拟机制:虚拟处理器&虚拟内存,目的是让进程有一种假象:“独享处理器和整个内存空间”。关于进程描述符structtask_struct放在后续内容......
  • 线程池代码详解
    线程池概念线程池是一种基于池化技术的多线程管理机制。在这种模式下,一组线程被创建并且维护在一个"池"中,这些线程可以被循环利用来执行多个任务。当有新的任务到来时,线程池会尝试使用已经存在的空闲线程,而不是每次都创建新线程。这样做的目的是为了减少因频繁创建和销毁线程所带......
  • JUC及多线程,线程安全
    JUC及多线程返回到Java开发知识汇总目录@程序员猴哥1.什么是JUCjava.util.concurrent:核心并发工具类。java.util.concurrent包含了许多线程安全,测试良好,高性能的并发模块。创建java.util.concurrent的目的就是要实现Collection框架对数据结构所执行的并发操作。核心......
  • 【QT5】<总览五> QT多线程、TCP/UDP
    文章目录前言一、QThread多线程二、QT中的TCP编程1.TCP简介2.服务端程序编写3.客户端程序编写4.服务端与客户端测试三、QT中的UDP编程1.UDP简介2.UDP单播与广播程序前言承接【QT5】<总览四>QT常见绘图、图表及动画。若存在版权问题,请联系作者删除!一、QThre......