linux的多任务编程-线程池,Linux的多任务编程-线程池
函数tpool_thread定义了工作线程的函数,其中真正与实际任务有关的只有一行代码:
(*(my_work->handler_routine))(my_work->arg);
即执行my_work->handler_routine指针指向的函数,并传入参数my_work->arg.其他的步骤都是为执行这个任务而进行的各种设置和准备.
void *tpool_thread(void *tpool)
{
tpool_work_t *my_work;
tpool_t *pool = (struct tpool *)tpool;
for(;;)
{/* 线程内循环 */
pthread_mutex_lock(&(pool->queue_lock));
/* 如果任务列表为0,并且线程池没有关闭,则一直等待,直到任务到来为止 */
while((pool->cur_queue_size == 0) && (!pool->shutdown))
{
pthread_cond_wait(&(pool->queue_not_empty), &(pool->queue_lock));
}
/* 线程池是否已经关闭,如果线程池关闭则线程自己主动关闭 */
if(pool->shutdown)
{
pthread_mutex_unlock(&(pool->queue_lock));
pthread_exit(NULL); /*线程退出状态为空,主线程不捕获各副线程状态*/
}
my_work = pool->queue_head;
pool->cur_queue_size--;
/*将任务链表头部去掉,改任务正在处理中*/
if(pool->cur_queue_size == 0)
pool->queue_head = pool->queue_tail = NULL;
else
pool->queue_head = my_work->next;
/* 任务链表还没有满 */
if((!pool->do_not_block_when_full) &&\
(pool->cur_queue_size == (pool->max_queue_size - 1)))
{
pthread_cond_broadcast(&(pool->queue_not_full));
}
/*任务链表为空*/
if(pool->cur_queue_size == 0)
{
pthread_cond_signal(&(pool->queue_empty));
}
pthread_mutex_unlock(&(pool->queue_lock));
/*启动线程业务处理逻辑*/
(*(my_work->handler_routine))(my_work->arg);
free(my_work);
}
return(NULL);
}
linux的多任务编程-线程池,Linux的多任务编程-线程池相关推荐
- Linux下套接字详解(七)----线程池accept处理高并发connect
前言 服务器在调用listen和accept后,就会阻塞在accept函数上,accpet函数返回后循环调用accept函数等待客户的TCP连接. 我们知道服务器段listen套接字能处理的连接数与监 ...
- Linux环境,C/C++语言手写代码实现线程池
前言 在我们日常生活中会遇到许许多多的问题,如果一个服务端要接受很多客户端的数据,该怎么办?多线程并发内存不够怎么办?所以我们需要了解线程池的相关知识. 一.线程池是什么? 1.线程池的简介 线程池是 ...
- Linux下的C编程实战(开发平台搭建,文件系统编程,进程控制与进程通信编程,“线程”控制与“线程”通信编程,驱动程序设计,专家问答)
Linux下的C编程实战(一) ――开发平台搭建 1.引言 Linux操作系统在服务器领域的应用和普及已经有较长的历史,这源于它的开源特点以及其超越Windows的安全性和稳定性.而近年来,Linux ...
- linux线程并不真正并行,Linux系统编程学习札记(十二)线程1
Linux系统编程学习笔记(十二)线程1 线程1: 线程和进程类似,但是线程之间能够共享更多的信息.一个进程中的所有线程可以共享进程文件描述符和内存. 有了多线程控制,我们可以把我们的程序设计成为在一 ...
- Linux C :线程操作和线程同步的多线程并发编程
在这之前可以先看看这边文章了解线程概念,信号量,条件变量,死锁.管程等概念 https://blog.csdn.net/superSmart_Dong/article/details/11666837 ...
- linux线程 ppt,Linux多线程编程多核编程.ppt
<Linux多线程编程多核编程.ppt>由会员分享,可在线阅读,更多相关<Linux多线程编程多核编程.ppt(28页珍藏版)>请在装配图网上搜索. 1.Linux多线程编程, ...
- Linux系统编程---13(线程控制函数,创建线程,循环创建多个线程,线程间共享全局变量)
线程控制 操作系统并没有提供创建线程的系统调用接口,因此大佬们封装了一个线程的接口库实现线程控制.意为着用户创建线程都使用的是库函数(所以有时候我们说创建的线程是一个用户态线程,但是在内核中对应有一个 ...
- 【Linux系统编程学习】Linux线程控制原语
此为牛客Linux C++课程笔记. 0. 关于线程 注意:LWP号和线程id不同, LWP号是CPU分配时间片的依据,线程id是用于在进程内部区分线程的. 1. 线程与进程的区别 对于进程来说,相同 ...
- linux c 网络编程与信号量,linux网络编程-----线程同步--信号量
开发使用多线程过程中, 不可避免的会出现多个线程同时操作同一块共享资源, 当操作全部为读时, 不会出现未知结果, 一旦当某个线程操作中有写操作时, 就会出现数据不同步的事件. 而出现数据混乱的原因:资 ...
- C# SmartThreadPool线程池技术实现多任务批量处理
一.多线程技术应用场景介绍 本期同样带给大家分享的是阿笨在实际工作中遇到的真实业务场景,请跟随阿笨的视角去如何采用基于开源组件SmartThreadPool线程池技术实现多任务批量处理.在工作中您是否 ...
最新文章
- linux驱动:i2c驱动(四)流程图之注册驱动
- [网络流24题] 最长k可重区间集
- python3基础题目,Python3.x 基础练习题100例(91-100)
- 【Linux环境下安装Maven与环境配置简易教程】
- 【51单片机快速入门指南】4.3.1: MPU6050调用DMP库获取四元数和欧拉角
- 搭建简单Django服务并通过HttpRequester实现GET/POST http请求提交表单
- unity3d 几种镜头畸变
- linux 下的挂载
- l2高斯分布_浅谈为什么L2正则化有效
- 第二单元答案计算机基础,《计算机基础》资源包-第二单元课后题答案.docx
- 分支限界算法c语言_算法分析
- JavaWeb:Filter和Listener
- HBuilder开发APP(二)——网络请求
- python模拟登陆steam
- Bus Hound使用心得#抓包工具#协议抓取
- ACM-水题 Demacia of the Ancients
- 什么是全国大学生电子设计大赛?如何备战?
- 计算机用老毛桃u盘备份系统,老毛桃u盘启动盘ghost备份系统操作步骤
- 爱因斯坦广义相对论:引力是时空的曲率
- word2016拼音指南功能无效解决方案
热门文章
- Theatre.js 动画JavaScript库
- Web Activities 简介
- exe电子书转换txt 下载_网站能经常看到的主流电子书格式
- 多个服务器数据互通_数据中心
- mpi并行 写同一文件_并行计算调度策略的笔记(001)
- python列表添加对象_python list append命令 添加对象
- 在Ubuntu Server14.04上编译Android6.0源码
- 亡命逃窜---三维搜索
- 转:关于Apache与Nginx的优势比较(经典)
- EasyPR中文车牌识别系统开发