c语言 多个线程对同一变量执行memcpy_手把手带你实现线程池

2e40abd577716f290274a7625ba1cba7.png

执行与任务分离的组件— 线程池

wangbojing/threadpool​github.com
10a2dcf6de013f4bc58808e1ea326ae7.png

多线程技术主要解决了处理器单元内多个线程执行的问题,它可以显著的减少处理器单元的闲置时间,增加处理器单元的吞吐能力。线程池是多线程编程的一个必要组件,并且对于很多编程人员都是透明的,更是神秘的。

线程池的概念,是一个用来管理一组执行任务线程的工具。既然是管理工具,那么该工具管理是用来管理任务与执行的。如图一线程池组件拓扑图,执行队列(Workers),任务队列(Jobs)和池管理(Pool Manager)三部分组成。

执行队列(Workers)是用来存放运行线程的队列。

任务队列(Jobs)是用来存放需要被执行的任务队列。

池管理(Pool Manager)主要是管理执行队列的执行顺序,执行任务的时间长短,对长时间没有使用的执行单元进行释放,执行单元满负荷运行的时及时添加执行单元;记录未执行的任务数量,对新任务入队,即将执行的任务出队等等。

44076c4e1d3928b1e869c6d0e74bc9e9.png
图一 线程池组件拓扑图

执行队列(Workers)中的每一个执行单元(Worker)由哪些元素组成?线程ID,退出标志。

任务队列(Jobs)中的每一个任务(Jobs)的组成元素?执行每一个任务的具体执行函数,每一个任务的执行参数。

池管理(Pool Manager)由哪些元素组成?每一个新任务添加与执行时的移除用的互斥锁,每一个线程挂起的时所等待的条件变量。

根据分析如图二线程池的类图。

625c6afdac63520c17d7549dcfdd5950.png
图二线程池的类图

到这里一个简单的线程池就已经可以呼之欲出了。以下为实现代码

#include 

这样的线程池还是只是一个Demo,原因有如下几点需要我们值得改进的。

  1. 线程池的线程数量是确定的,不能随着系统任务请求数量放缩线程池的大小。
  2. 任务数量的统计,并没有对任务队列进行统计
  3. 执行任务中的线程数量,等待执行的任务数量进行统计
  4. 每一个执行任务的时间没有做限制,
  5. IO密集型与计算密集型区分,线程池非常常用,但是根据不同的业务场景需要设置不同配置
  6. 在用户任务执行函数里,用户主动的调用了pthread_exit退出线程的保护机制

针对于以上几点问题,改进了一版线程池

#include 

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

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

相关文章

android shape 自定义,Android自定义shape的使用

MainActivity如下:package cn.testshape;import android.os.Bundle;import android.app.Activity;/*** Demo描述:* 自定义shape的使用*/public class MainActivity extends Activity {Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstan…

python 爬虫库 beautifulsoup4_Python爬虫之BeautifulSoup4

The Dormouses storyOnce upon a time there were three little sisters; and their names were , Lacie and Tillie; and they lived at the bottom of a well.... """ # 创建 Beautiful Soup 对象,指定lxml解析器 soup BeautifulSoup(html, "…

python手势识别_Python|使用opencv进行简单的手势检测

简单的手势识别,基本思路是基于皮肤检测,皮肤的颜色在HSV颜色空间下与周围环境的区分度更高,从RGB转换到HSV颜色空间下针对皮肤颜色进行二值化,得到mask: defHSVBin(img):hsvcv2.cvtColor(img,cv2.COLOR_RGB2HSV) lowe…

android程序root权限,android – 如何从源代码授予对特定应用程序的root访问权限而不是root权限?...

我正在从源代码编译Android ROM,我有一个应用程序,我希望它预先安装并让它以root权限运行.如何在不支持整个ROM的情况下授予对此特定应用程序的root访问权限?解决方法:希望你不需要root …典型的股票Android ROM为很少的东西提供root权限,与principle of least priv…

android 弹出网格菜单,在android中的recyclerView中显示弹出按钮的确...

as per my above comment可以使用Popup MenuAndroid Popup Menu displays the menu below the anchor text if space is available otherwise above the anchor text. It disappears if you click outside the popup menu.试试这个创建菜单文件文件:poupup_menu.xml…

人工智能选go还是python_深圳人工智能学Python还是go,真实经历分享

深圳人工智能学Python还是go,进行选择深圳Python培训 的时候,第一要思考的就是该机构的口碑如何。如果该家机构没有一定的口碑信誉,就等于搬起石头砸了自己的招牌。为什么突然就那么火了,Python的工资待遇,人工智能&am…

python做excel数据分析统计服_Python也能做到Excel那样,条件统计轻松解决工作需求...

此系列文章收录在公众号中:数据大宇宙 > 数据处理 >E-pd 转发本文并私信我"python",即可获得Python资料以及更多系列文章(持续更新的) 经常听别人说 Python 在数据领域有多厉害,结果学了很长时间,连数据处理都麻烦…

android 系统倒计时显示时间,Android 依据系统时间整点、半点倒计时

activity_main.xml中的代码xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"match_parent"android:background"android:color/white">android:id"id/myt…

java贪吃蛇_如何用Java还原童年回忆?在线教你完成贪吃蛇小游戏

今天我就从零开始来完成这个小游戏,完成的方式也是一步一步的添加功能这样的方式来实现。额,不好意思,放错了,重来第一步完成的功能:写一个界面大家见到的贪吃蛇小游戏,界面肯定是少不了的。因此&#xff0…

android+建模工具,什么是适用于Android Studio的3D模型环境的最佳工具

首先,你已经链接的页面没有引用文字。它代替了this文本。 现在,关于文本本身:你正在脱离情境和/或误解它。这是一个完整的引文:The Android framework provides plenty ofstandard tools for creating attractive, functionalgrap…

python编写统计选票的程序_使用python编写微信公众号发稿统计程序

近日为学校公众号统计发稿情况,需统计本年度各部门分别所发稿件标题、时间、作者等。 首先考虑查看公众号后台有无统计功能,看到的界面如下: 每页只显示7天的消息,且没有部门作者信息。再看另一界面: 只统计总体的发稿…

android 刷windows10,微软计划在Android机上刷Windows 10

据外媒TechCrunch报道,目前微软正努力采取措施让Android设备运行Windows 10系统来提升自己的市场份额。目前,微软在公布Windows 10的发展战略时开始尝试与新的手机厂商合作,而这些厂商之前都至推出过Android系统手机。微软计划在Android机上刷…

jtextpane设置不能选中_在Bridge cc中不能使用camera raw 的编辑功能,解决方法

有时我们在Bridge cc中想对raw文件进行处理,这时需要启动camera raw功能,可是当我们启用时却显示不能编辑,下面说下如何启动使用camera raw 的编辑功能1.打开一张raw格式文件,在文件菜单或者右键选择在camera raw中打开&#xff0…

android icon命名规则,安卓手机的APP图标尺寸规范和图标命名规范

安卓手机的APP图标尺寸规范和图标命名规范点击查看原文android图标包括:程序启动图标、底部菜单图标、弹出对话框顶部图标、长列表内部列表项图标、底部和底部tab标签图标。1、安卓程序启动图标尺寸:ldpi(120dpi)小屏幕mdpi(160dpi)中屏幕hdpi(240dpi)大…

python俄罗斯方块课程设计报告_用python实现俄罗斯方块

!/usr/bin/python -- conding:utf-8 -- from tkinter import * import time import threading import random import math from tkinter import messagebox 变量定义 BIANCHANG 19 COLOR [red, orange, yellow, green, blue, purple, #00C5CD, #00EE76, #388E8E, #556B2F, #6…

intent android 匿名,Android 匿名启动activity 启动系统activity

一般我们使用Intent 进行activity跳转时我们都知道需要跳转的activity的名字,例如:Intent intentnew Intent(FirstActivity.this,SecondActitivy.class);startActivity(intent);当SecondActitivy.class和FirstActivity不再同一个App的时候,我们就需要用到匿名启动&a…

opencv python教程简书_Python-OpenCV —— 基本操作一网打尽

OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows、MacOS操作系统上。它轻量级而且高效——由一系列 C 函数和少量C类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处…

android listview 数据同步,android中ListView数据刷新时的同步方法

本文实例讲述了android中ListView数据刷新时的同步方法。分享给大家供大家参考。具体实现方法如下:public class Main extends BaseActivity {private static final String TAG "tag";private static final int STATUS_CHANGE 0;ExpandableListView mEl…

python __reduce__魔法方法_Python魔法方法指南

(译)Python魔法方法指南 简介 本指南归纳于我的几个月的博客,主题是 魔法方法 。 什么是魔法方法呢?它们在面向对象的Python的处处皆是。它们是一些可以让你对类添加“魔法”的特殊方法。 它们经常是两个下划线包围来命名的(比如 __init__ &a…

opengles 顶点数组 android,OpenGLES顶点属性、顶点数组和缓冲区对象

顶点属性数据可以用一个顶点数组对每个顶点指定,也可以将一个常量值用于一个图元的所有顶点OpenGLES支持最少16个顶点属性。准确查询顶点数量方法如下:GLint maxVertexAttribs;glGetIntegerv(GL_MAX_VERTEX_ATTRIBS, &maxVertexAttribs);一、指定顶点…