免费手机网站建站平台自建网站

web/2025/9/29 23:44:58/文章来源:
免费手机网站建站平台,自建网站,今天郑州新闻头条,dede页码的调用 网站进程与线程 进程#xff1a;直观的说就是任务管理器中各种正在运行的程序。对于操作系统来说#xff0c;进程仅仅是一个数据结构#xff0c;并不会真实的执行代码 线程#xff1a;通常被称作但并不真的是轻量级进程或实际工作中的进程#xff0c;它会真实的执行代码。每…进程与线程 进程直观的说就是任务管理器中各种正在运行的程序。对于操作系统来说进程仅仅是一个数据结构并不会真实的执行代码 线程通常被称作但并不真的是轻量级进程或实际工作中的进程它会真实的执行代码。每个线程都有一个需要执行的代码块称为线程回调函数。每个进程启动的时候会同步启动一个主线程而主线程所执行的代码块就是main函数。当main函数结束时主线程结束并销毁同时其他子线程随之销毁 真并发与伪并发 伪并发 在早期的cpu即单核cpu中因性能核心各方面较为落后并发编程实际是一个伪并发编程即系统中所有进程按照优先级去抢占cpu时间片也就是系统一会执行这个一会执行哪个。 由于抢占时间片所需时间较短所以我们并不觉得程序卡顿。但各进程抢占cup时间片是一个很麻烦的事情cpu虽然提供任务切换的功能即TSS任务段但Windows并不使用。这是因为Windows自己实现了线程调度即在线程切换时上个线程代码执行到的地方的线程的状态线程上下文通用寄存器段寄存器硬件调试寄存器EIP指令指针寄存器EFLAGS等都会被Windows通过WindowsContext保存直到再次切换回来后再加载 真并发 随着科技的发展cpu由单核cpu变成了多核cpu。此时多个核心可以同时独立执行一个 任务此时也称作真并发 并发形式 1.多进程并发一个进程里只有一个线程同时启动多个进程实现并发,如浏览器打开的多个窗口 2.多线程并发一个进程内运行多个线程是真实的并发。其中存在变量的访问问题具体如下有Value 100 全局变量以及AB两个线程。初始时A,B线程访问Value访问值都是100现AB两线程都对Value进行。但操作完成后Value的值为101丢失了一个操作。这种情况叫做线程同步问题 线程的生存周期 1.当该线程回调函数执行完毕时自然死亡 2.当主线程死亡时子线程被动死亡 并发与并行并发更强调数量并行更强调性能 线程应用 普通函数应用 #includeiostream #includethread void FirstThreadCallBack() //构建一个普通函数作为子线程 {for (size_t i 0; i 100000; i){std::cout First: i std::endl;} } int main() {std::thread obj(FirstThreadCallBack); //声明线程对象启动一个线程去执行线程回调函数for (size_t i 0; i 100000; i){std::cout main: i std::endl;}system(“pause”);//加上此函数使主线程不会结束让我们更清晰看到线程并发的过程。否则主线程结束子线程随之结束return 0; }此时程序会同时进行上述两个循环打印 仿函数应用 #includeiostream #includethread class Exec//一个仿函数 { public:void operator()()const{std::cout Exec std::endl;} }; int main() {Exec e;std::thread obj(e);return 0; }此时打印Exec Lambda应用 #includeiostream #includethread int main() {std::thread obj([] {std::cout Lambda std::endl; });return 0; }此时程打印Lambda 综上可知任何可以调用的类型都可以用于线程对象的构造函数传参 线程死亡 一旦线程启动了我们就需要知道线程是怎么结束的 1.自然死亡:thread析构函数terminate()在子线程执行完毕后析构子线程 2.非自然死亡thread析构函数执行完毕时子线程析构但子线程并没有执行完毕 3.等待绝对的自然死亡 等待子线程执行完毕后程序再进行执行 4.不再等待主线程存活时后台运行依赖于主线程的存活 5.如果一个线程是Windows原生线程主线程销毁后其也会死亡 Windows原生线程 现在我们验证一下当主线程死亡时Windows原生线程会不会死亡 #includeiostream #includethread #includewindows.h DWORD ThreadCallBack(LPVOID lpThreadParameter) {for (size_t i 0; i 100000; i){std::cout First: i std::endl;}return 0; } int main() {CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)ThreadCallBack, NULL, NULL, NULL);//创建了一个windows原生线程return 0 } 此时运行程序发现随着主线程的结束该Windows原生线程死亡 等待死亡 #includeiostream #includethread #includewindows.h DWORD ThreadCallBack(LPVOID lpThreadParameter) {for (size_t i 0; i 100000; i){std::cout First: i std::endl;}return 0; } int main() {HANDLE hThread CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)ThreadCallBack, NULL, NULL, NULL);//创建一个原生的Windows线程WaitForSingleObject(hThread, -1); //此时主线程会永久等待该子线程结束以后再结束return 0 }此时运行程序原生线程不会死亡直到它运行完毕 阻塞等待 #includeiostream #includethread #includewindows.h DWORD ThreadCallBack(LPVOID lpThreadParameter) {for (size_t i 0; i 100000; i){std::cout First: i std::endl;}return 0; } int main() {std::thread obj(FirstThreadCallBack);//创建一个普通的线程obj.join(); //阻塞等待作用是在此处等待子线程结束程序再继续运行。//当使用此函数时我们通常需要加一个异常处理。这是因为子线程可能会出现一个异常报错而导致无法执行完毕以至于程序一直处于阻塞等待的情况return 0 }此时运行程序知道子线程运行完毕主线程才会结束 不再等待 #includeiostream #includethread #includewindows.h DWORD ThreadCallBack(LPVOID lpThreadParameter) {for (size_t i 0; i 100000; i){std::cout First: i std::endl;}return 0; } int main() {std::thread obj(FirstThreadCallBack);obj.detach(); //不再等待同Windows原生线程一样主线程死亡其子线程也死亡 //此时额外加一个循环程序在执行该循环时主线程没有死亡子线程也不会死亡而是一起执行两个线程for (size_t i 0; i 100000; i) {std::cout main: i std::endl;}return 0; } 线程同步问题 问题演示 如下当我们演示一个简单的线程同步 #includeiostream #includethread #includewindows.h #includestring.h void Print(std::string szBuffer,int nCount) {for (size_t i 0; i nCount; i){std::cout szBuffer : i std::endl;} } int main() {std::thread obj(Print,abc,200);system(“pause”);return 0; }程序运行发现 原因这就是时间切片的伪并发可能出现的问题很形象展示了线程同步问题这个现象 现我们针对如下线程同步程序进行进一步的问题解决讲解 #include iostream #include thread int g_Value 0; void add() {for (size_t i 0; i 1000000; i){g_Value;} } int main() {std::thread objA(add);std::thread objB(add);objA.join();objB.join();std::cout g_Value std::endl;system(pause);return 0; }程序运行以后g_Value的最终结果应该是2000000但但每次运行时g_Value都是随机数这是因为在线程同步时出现丢失操作 互斥体解决线程同步问题 方法一使用互斥体方法 #include iostream #include thread #includemutex int g_Value 0; std::mutex some_mutex; //声明一个互斥体,用于线程可能出错的地方 void add() {for (size_t i 0; i 1000000; i){some_mutex.lock(); //该函数被互斥体加锁保护。当一个线程在访问该函数时其他线程无法访问g_Value; some_mutex.unlocke(); //互斥体解锁} }//此时该函数不会再出现多线程同时访问的问题了 int main() {std::thread objA(add);std::thread objB(add);objA.join();objB.join();std::cout g_Value std::endl;system(pause);return 0; }方法二使用锁类模板 #include iostream #include thread #includemutex int g_Value 0; void add() {for (size_t i 0; i 1000000; i){//构造函数调用时加锁析构函数调用时解锁std::lock_guardstd::mutex guard(some_mutex); g_Value;} } int main() {std::thread objA(add);std::thread objB(add);objA.join();objB.join();std::cout g_Value std::endl;system(pause);return 0; } 以上两种方法可以很好的解决线程同步问题 作业 01.尝试使用多线程造成线程同步问题。 02.尝试使用thread库中的其他控制函数

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

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

相关文章

上海快速建站平台wordpress 登录后页面空白页

说道vue组件库,目前主流的基本就是iview和element。今天又发现一个很不错的。HeyUI。组件也很丰富,入门比较简单。反正开源框架我们有不嫌多,多多益善啊。感兴趣的可以看看。关于HeyUIHeyUI 是一套基于 Vue2.0 的开源 UI 组件库,主…

企业如何建设网站呢网站建设的组织机构

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 1. 用法: 从配置properties文件中读取init.password 的值。 Value("${init.password}")private String initPwd…

asp网站源码说明qq推广群号码大全

研究背景 复杂城市地形下无人机避障三维航迹规划是无人机技术领域的一个重要研究方向。无人机在城市环境中的广泛应用,如快递配送、城市监测和搜救等任务,对其航迹规划和避障能力提出了挑战。 研究背景包括以下方面: 无人机的快速发展:无人机技术在近年来得到了迅猛发展…

宝塔 wordpress ssl青岛网站的优化

指针和数组 1. 指针的算术运算1.1 指针加上整数1.2 指针减去整数1.3 两个指针相减1.4 指针比较1.5 指向复合常量的指针 2. 指针用于数组处理3. 用数组名作为指针3.1 数组型实际参数(改进版)3.2 用指针作为数组名 4. 指针和多维数组4.1 处理多维数组的元素…

互助平台网站建设招商网站设计

目录 1. RabbitMQ2. Kafka3. ActiveMQ4. Redis5. ZeroMQ6. Apache Pulsar 消息队列(Message Queue)是一种异步通信机制,它将消息发送者和接收者解耦,从而提高了应用程序的性能、可扩展性和可靠性。在分布式系统中,消息…

沈阳哪家公司做网站好有没有做.net面试题的网站

1 背景 在上篇博客《自动驾驶---Motion Planning之Path Boundary》中,笔者主要介绍了path boundary的一些内容,通过将道路中感兴趣区域的动静态障碍物投影到车道坐标系中,用于确定L或者S的边界,并利用道路信息再确定Speed的边界,最后结合粗糙的速度曲线和路径曲线,即可使…

物流网站 源码电商网站的数据库设计

美国股市和债市近期遭遇了罕见的双重打击,道指连续六个交易日下跌,引发市场广泛关注。这一现象背后,是否又上演了某一“魔咒”?本文将从多个角度对此进行深入分析。 道指罕见创下六连阴、标普500指数迎来硅谷银行危机以来最大两日…

新公司怎样做网站在四川眉山软件开发背景介绍

硬盘空间是大家最头痛的一个问题,大家在硬盘空间变小的时候怎么腾空间的呢?下面为大家分享7个mac系统释放空间的高级方法,大家赶紧来收了! mac系统释放硬盘空间方法: 方法一:删除Emacs——可以节省出60MB的…

专业的网站制作设计永康新站优化

在HotSpot虚拟机中,一个空的Object对象在64位的环境下通常占用约 16 字节的对象头。 这个对象头包括: 标记字(Mark Word): 8 字节,用于存储对象的状态信息、锁信息等。类型指针(Class Pointer&…

湖北省建设厅造价官方网站废旧网站哪个做的最好

集中制冷用空调系统中,单台冷却塔的冷却水量基本上都小于1,000m/h,且装有淋水填料的横流机械通风开式居多。本文将已横流开式冷却塔为对象,探讨影响其效率的几个因素。横流开式冷却塔示意图如下所示:横流开式冷却塔示意图 Fig 01说…

电子商务网站建设方wordpress 加速乐

中国作家网消息:5月22日,文化艺术出版社召开旅法青年女作家林风竹“诗画小说”《世界上最幸福的人》作品研讨会。在京的文学评论家、艺术家和编辑家胡平、孟繁华、陈晓明、白烨、施占军、兴安等就林风竹的小说进行了深入的分析和热烈讨论。专家们认为&am…

免费建设门户网站wordpress信息搜集

SQL语句 结构化查询语言(Structured Query Language),在关系型数据库上执行数据操作、数据检索以及数据维护的标准语言。 分类 DDL 数据定义语言(Data Definition Language),定义对数据库对象(库、表、列、索引)的操作。 DML 数据操作语言(Data Manip…

电子商务网站建设策划书例子网站服务器和ftp空间

东方财富证券:东方财富网(深创:300059)旗牌照齐全证券公司,极具互联网基因的券商。.Net服务端开发工程师/.Net前端开发工程师[职位介绍]服务端:开户、交易及资讯系统的后端接口服务(Asp.Net WebApi)开发;服务端&#x…

discuz蓝色城市门户论坛网站模板wordpress回复框无法加载

本篇博客只提供安装包 安装与卸载难度较低,不做赘述 并不是说一定要卸载才能安装,灵活掌握,如果实际场景需要清理老版本sqlserver那么选择卸载 一、下载 下载地址 sqlserver2014官方版下载丨最新版下载丨绿色版下载丨APP下载-123云盘 二、卸载…

自己的网站打不开了路由器统一登录网站

点击“终码一生”,关注,置顶公众号 每日技术干货,第一时间送达! 问大家一个问题:你是否想过在自己的电脑上部署一套大模型?并用自己的知识库训练他? 阿里通义千问今天发布了最新的开源大模型系…

网站的建设初步定位富锦网站制作

本文主要介绍基于51单片机的流水灯仿真(完整仿真源文件及代码见文末链接) 仿真运行视频 Proteus仿真--基于51单片机的流水灯仿真(从左往右) 附完整Proteus仿真资料代码资料 百度网盘链接: https://pan.baidu.com/s/1aZH13zwQkNB7…

做网站视频赚钱吗中山有网站建设公司吗

给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。 示例: 给定一个链表: 1->2->3->4->5, 和 n 2. 当删除了倒数第二个节点后,链表变为 1->2->3->5. 说明: 给定的 n 保证是有效…

网站制作建站婚纱摄影网站源码asp

自然语言处理-数学基础概述1.信息论基础1.1熵1.2 联合熵和条件熵1.3 相对熵和交叉熵1.4 互信息和双字耦合度1.5 噪声信道模型概述 本系列文章计划总结整理中国科学院大学宗成庆老师《自然语言处理》课程相关知识,参考数目《统计自然语言处理》-第二版,宗…

建设网站平台哪里最好微信公众号怎么开通免费

基本类型:基本类型自然不用说了,它的值就是一个数字,一个字符或一个布尔值。引用类型:是一个对象类型,值是什么呢?它的值是指向内存空间的引用,就是地址,所指向的内存中保存着变量所…

北京顺义有网站建设公司吗免费制作网页

题干: 描述 2001年9月11日,一场突发的灾难将纽约世界贸易中心大厦夷为平地,Mr. F曾亲眼目睹了这次灾难。为了纪念“9?11”事件,Mr. F决定自己用水晶来搭建一座双塔。 Mr. F有N块水晶,每块水晶有一个高度&#xff0…