首页 > 其他分享 >线程池

线程池

时间:2024-06-10 23:21:51浏览次数:20  
标签:thread void 线程 printf mytask pool


// 定义任务函数,用于模拟需要执行的任务
void *mytask(void *arg)
{
 int n = (int)arg;

 // 输出任务信息和需要花费的时间
 printf("[%u][%s] ==> job will be done in %d sec...\n",
  (unsigned)pthread_self(), __FUNCTION__, n);

 sleep(n); // 模拟任务执行时间

 // 输出任务完成信息
 printf("[%u][%s] ==> job done!\n",
  (unsigned)pthread_self(), __FUNCTION__);

 return NULL;
}

// 定义计时函数,用于每秒打印一个计时秒数
void *count_time(void *arg)
{
 int i = 0;
 while(1)
 {
  sleep(1);
  printf("sec: %d\n", ++i); // 输出计时秒数
 }
}

int main(void)
{
 pthread_t a;
 pthread_create(&a, NULL, count_time, NULL); // 创建打印计时秒数的线程

 // 初始化线程池
 thread_pool *pool = malloc(sizeof(thread_pool));
 init_pool(pool, 2);

 // 添加任务到线程池
 printf("throwing 3 tasks...\n");
 add_task(pool, mytask, (void *)(rand()%10)); // 添加任务到线程池
 add_task(pool, mytask, (void *)(rand()%10)); // 添加任务到线程池
 add_task(pool, mytask, (void *)(rand()%10)); // 添加任务到线程池

 // 检查活动线程数
 printf("current thread number: %d\n", remove_thread(pool, 0)); // 移除空闲线程
 sleep(9);

 // 再次添加任务到线程池
 printf("throwing another 2 tasks...\n");
 add_task(pool, mytask, (void *)(rand()%10)); // 添加任务到线程池
 add_task(pool, mytask, (void *)(rand()%10)); // 添加任务到线程池

 // 添加线程到线程池
 add_thread(pool, 2); // 增加线程数

 sleep(5);

 // 从线程池移除线程
 printf("remove 3 threads from the pool, current thread number: %d\n", remove_thread(pool, 3)); // 从线程池移除线程

 // 销毁线程池
 destroy_pool(pool); // 销毁线程池
 return 0;
}

标签:thread,void,线程,printf,mytask,pool
From: https://www.cnblogs.com/xiaoyaoj/p/18241228

相关文章

  • 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......
  • android主线程与子线程
    创建子线程创建子线程在android中穿件子线程的方案很简单创建子线程的几种方法///////第一种///////classThreadoneextendsThread{@Overridepublicvoidrun(){}//重写run方法,这个方法就是子线程一旦启用就会执行的方法}newThreadone().start()//启动子线程/......