c语言 多个线程对同一变量执行memcpy_手把手带你实现线程池
执行与任务分离的组件— 线程池
wangbojing/threadpoolgithub.com
多线程技术主要解决了处理器单元内多个线程执行的问题,它可以显著的减少处理器单元的闲置时间,增加处理器单元的吞吐能力。线程池是多线程编程的一个必要组件,并且对于很多编程人员都是透明的,更是神秘的。
线程池的概念,是一个用来管理一组执行任务线程的工具。既然是管理工具,那么该工具管理是用来管理任务与执行的。如图一线程池组件拓扑图,执行队列(Workers),任务队列(Jobs)和池管理(Pool Manager)三部分组成。
执行队列(Workers)是用来存放运行线程的队列。
任务队列(Jobs)是用来存放需要被执行的任务队列。
池管理(Pool Manager)主要是管理执行队列的执行顺序,执行任务的时间长短,对长时间没有使用的执行单元进行释放,执行单元满负荷运行的时及时添加执行单元;记录未执行的任务数量,对新任务入队,即将执行的任务出队等等。
执行队列(Workers)中的每一个执行单元(Worker)由哪些元素组成?线程ID,退出标志。
任务队列(Jobs)中的每一个任务(Jobs)的组成元素?执行每一个任务的具体执行函数,每一个任务的执行参数。
池管理(Pool Manager)由哪些元素组成?每一个新任务添加与执行时的移除用的互斥锁,每一个线程挂起的时所等待的条件变量。
根据分析如图二线程池的类图。
到这里一个简单的线程池就已经可以呼之欲出了。以下为实现代码
#include
这样的线程池还是只是一个Demo,原因有如下几点需要我们值得改进的。
- 线程池的线程数量是确定的,不能随着系统任务请求数量放缩线程池的大小。
- 任务数量的统计,并没有对任务队列进行统计
- 执行任务中的线程数量,等待执行的任务数量进行统计
- 每一个执行任务的时间没有做限制,
- IO密集型与计算密集型区分,线程池非常常用,但是根据不同的业务场景需要设置不同配置
- 在用户任务执行函数里,用户主动的调用了pthread_exit退出线程的保护机制
针对于以上几点问题,改进了一版线程池
#include
c语言 多个线程对同一变量执行memcpy_手把手带你实现线程池相关推荐
- c语言 多个线程对同一变量执行memcpy_你可曾听过网络编程中应用线程本地存储?...
壹:你可曾听过线程本地存储? 1. 什么是线程本地存储? 线程本地存储:thread local storage(简称TLS).也叫线程特有存储:thread specific storage(简称T ...
- Python 多个线程按先后顺序执行,并保持各子线程和主线程的通信
Python 多个线程按先后顺序执行,并保持各子线程和主线程的通信 摘要 最近有个项目使用pyqt5写的界面,界面展示部分作为项目的主线程,另外通过调用Thread,传入不同的参数又设置了五个子线程, ...
- c语言 多个线程对同一变量执行memcpy_PHP 进阶之路 - 揭开 PHP 线程安全的神秘面纱
变量的作用域 从作用域上来说,C语言可以定义4种不同的变量:全局变量,静态全局变量,局部变量,静态局部变量. 下面仅从函数作用域的角度分析一下不同的变量,假设所有变量声明不重名. 全局变量(int g ...
- 百度java的线程技术_自我提升(基础技术篇)——java线程简介
前言:虽然自己平时都在用多线程,也能完成基本的工作需求,但总觉得,还是对线程没有一个系统的概念,所以,查阅了一些资料,理解那些大神和官方的资料,写这么一篇关于线程的文章 本来想废话一番,讲讲自己的经历 ...
- 当前线程等待某些线程运行结束再执行的几种方案。CountDownLatch机制简单解读以及简单实现
需求背景:如果没有采取什么措施,在开启分支线程后,当前线程继续往后执行,而不会阻塞等待分支线程,代码及运行结果如下. 1. Thread类的join方法 优点:如果当前线程需要指定某些线程结束后再执行 ...
- volatile能保持线程安全吗_从volatile说到i++的线程安全问题
一般说来,volaTIle用在如下的几个地方: 1.中断服务程序中修改的供其它程序检测的变量需要加volaTIle: 2.多任务环境下各任务间共享的标志应该加volaTIle: 3.存储器映射的硬件寄 ...
- c语言哪些变量不要加锁,[转]关于ReentrantLock中线程读某个变量是否需要加锁
我在使用ReentrantLock类对变量进行多线程累加时,调用了lock()和unlock()方法,但读取该变量时我未加锁,结果是能正确执行,代码如下: public class Main { pr ...
- linux C语言多线程库pthread中条件变量的正确用法逐步详解
linux C语言多线程库pthread中条件变量的正确用法: 了解pthread常用多线程API和pthread互斥锁,但是对条件变量完全不知道或者不完全了解的人群. 关于条件变量的典型应用,可以参 ...
- (四)多线程说学逗唱:线程险恶,变量和线程安全不得不防
(一)多线程说学逗唱:关于线程那不得不说的二三事 (二)多线程说学逗唱:新手村偶遇Thread类 (三)多线程说学逗唱:村口的老R头是个扫地僧(Runnable) (五)多线程说学逗唱:打铁还需自身硬 ...
最新文章
- Java的原始数据类型一共就8个
- 【视觉项目】【day1】8.20号实验记录(初步使用模板匹配)
- 这些解决 Bug 的套路,你都会了不?
- 微信小程序富文本rich-text使用详解-微信小程序系统学习攻略​
- (暴力求解)百钱买百鸡问题升级版
- 导数/微分/积分的区别
- windows系统bat批处理 管理nginx启动 nginx脚本管理bat脚本管理生命周期windows一键nginx启动
- tomcat 启动报错 解决办法 A child container failed duringnbsp
- 解决pycharm问题:module 'pip' has no attribute 'main'
- ax200蓝牙驱动linux,AX200蓝牙驱动
- 量化交易----常见股票特征和编程实现
- linux端口映射到内网机器,linux如何将公网IP映射到局域网IP?
- 关于射频技术在粮食安全的科研进展
- 【说不得得半路出家】对一个html案例模版的小小修改
- 单位电脑禁用u盘_组策略禁止u盘_注册表禁止u盘
- 阿里云虚拟机转让(RAM创建账户)
- UDS——ISO14229
- 高级数据库三:浅谈数据库事务(transaction)
- 数字货币钱包 HD Wallet的助记词和种子的生成原理(BIP39)
- 检测不到声卡High Definition Audio控制器显示代码10?驱动人生教你如何解决问题
热门文章
- java set的first_Java TreeSet pollFirst()方法与示例
- C语言1的阶级加3的阶级,第六天学C语音(一点分支与循环+n的阶层的练习)
- 数字图像处理之图像几何变换
- [蓝桥杯]算法提高 第二点五个不高兴的小明(记忆化搜索||动态规划)
- 样式图片_中式门窗花格图片大全样式全面选择多
- java mysql dao_Java DAO 模式
- HTTP概念详解与案例测试
- 2008服务器系统功能,Windows Server 2008 DNS服务器新增功能
- spark教程python案例_Spark实战(四)spark+python快速入门实战小例子(PySpark)
- 『操作系统』 进程的描述与控制 Part2 进程同步