C++的并发世界(二)——初识多线程

0.引言

  C++的并发世界(零)和C++的并发世界(一)的东西真的对于我这种初学者难以理解,我确定从第一个多线程案例进行学习归纳总结。

1.多线程的目的

  ①将耗时的任务进行分解,进行实时响应;
  ②充分利用多核CPU处理数据;
  ③读写分离,解耦合设计,即数据流分离;

2.多线程例程解析

#include <iostream>
#include <thread>void ThreadMain()
{std::cout << "begin main thread!" << std::endl;
}int main()
{std::thread th(ThreadMain);//线程创建启动return 0;
}

以开始调试的方式执行该程序,会发现中断错误!
在这里插入图片描述
此时将源代码修改如下,可以正常执行:

#include <iostream>
#include <thread>void ThreadMain()
{std::cout << "begin main thread!" << std::endl;
}int main()
{std::thread th(ThreadMain);//线程创建启动th.join();//阻塞等待子线程退出return 0;
}

3.多线程概念总结归纳

①并发:指两个及以上的独立活动同时进行,即一个程序执行多个独立的任务,以往计算机,单核cpu某一个时刻只能执行一个任务。若要实现多任务,则需要通过操作系统采用时间片询方法进行多进程切换。多进程切换的方法属于伪并发,操作系统保存各个任务的各种状态、执行进度需要时间开销。随着硬件发展,出现了多处理器,能够实现真正的并行执行多个任务(硬件并发)
在这里插入图片描述
②可执行程序(文件):非常好懂,略;linux为可IO操作的文件。
③进程:正在执行的可执行程序。
④线程:一个进程只能有一个主线程。线程并不是越多越好,每个线程都需要一个独立的堆栈空间,线程之间的切换需要保存很多中间状态,切换会耗费本该属于程序运行的时间。
⑤多进程并发:在同一电脑上可采用管道,文件,消息队列,共享内存实现多进程并发;不同电脑则采用socket通信技术
⑥多线程并发:一个进程中所有线程共存地址空间,需要解决不同线程间数据一致性的问题

4.线程与进程优缺点

和进程相比,线程有如下优点:
①线程启动速度更快,更轻量级;
②系统资源开销更少,执行速度更快;
和进程相比,线程有如下缺点:
①要小心处理数据的一致性;
②以往多线程代码不能跨平台,因此从C++11,支持多线程,增强移植性

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

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

相关文章

JVM之内存区域划分、类加载、垃圾回收机制(GC)

JVM&#xff08;Java虚拟机&#xff09;是Java编程语言的核心组件之一&#xff0c;它是一个虚拟的计算机环境&#xff0c;用于在各种硬件和操作系统上执行Java字节码。JVM的设计目标是提供一种可移植、安全、高性能的执行环境&#xff0c;使得Java程序能够在不同平台上运行&…

AWS上面部署一台jenkins

问题 客户预算有限&#xff0c;需要在aws云上面搞一台EC2手动安装jenkins发版。 步骤 创建密钥对 在EC2服务里面创建密钥对&#xff0c;具体如下图&#xff1a; 设置密钥对&#xff0c;如下图&#xff1a; 保存好这个私钥文件&#xff0c;以便后续用这个私钥文件ssh登录j…

AI技术助推汽车行业走向更光明的未来

我们在汽车上度过的时间很多&#xff0c;有时候由于交通、天气和其他路况问题&#xff0c;我们在汽车上度过的时间之久甚至会出乎意料。正因如此&#xff0c;保障旅途体验的舒适和安全就显得至关重要。交通事故每天都会发生&#xff0c;因此在车辆中采取额外的安全措施对于所有…

强化基础-Java-泛型基础

什么是泛型&#xff1f; 泛型其实就参数化类型&#xff0c;也就是说这个类型类似一个变量是可变的。 为什么会有泛型&#xff1f; 在没有泛型之前&#xff0c;java中是通过Object来实现泛型的功能。但是这样做有下面两个缺陷&#xff1a; 1 获取值的时候必须进行强转 2 没有…

50位主播带货破亿,抖音3月榜单有哪些看点?

3月&#xff0c;随着“抖音商城38好物节”的开展&#xff0c;平台消费氛围浓郁。数据显示&#xff0c;2月28日至3月8日&#xff0c;平台日均支付GMV同比增长了33%&#xff0c;好物节电商直播累计时长达4327万小时&#xff0c;挂购物车的短视频看播量达760亿次。 不过&#xff0…

基于Zabbix 5.0 实现windows服务器上应用程序和主机端口的状态监控

基于Zabbix 5.0 实现windows服务器上应用程序和主机端口的状态监控 背景 用python开发的应用程序在服务器上运行,有时候会出现程序自动退出却收不到告警的情况 环境 zabbix服务器:Centos7 64位 Windows服务器: Windows 10 64位 软件 zabbix_server:zabbix5.0 zabbix_…

利用Winform实现文字滚动(仅供参考)

本人水平有限&#xff0c;如有写得不对的地方&#xff0c;望指正。为了简单化&#xff0c;做了一个简陋版的滚动控件。本文的内容仅供参考 测试环境&#xff1a; visual studio 2017 .net framework 4.0 原理非常简单&#xff1a; 1 先自定义一个继承UserControl的控件&am…

啥是MCU,MCU科普

啥是MCU&#xff0c;MCU科普 附赠自动驾驶学习资料和量产经验&#xff1a;链接 MCU是Microcontroller Unit 的简称&#xff0c;中文叫微控制器&#xff0c;俗称单片机&#xff0c;是把CPU的频率与规格做适当缩减&#xff0c;并将内存、计数器、USB、A/D转换、UART、PLC、DMA等…

数据恢复工具可以恢复所有丢失的文件吗

随着数字时代的快速发展&#xff0c;数据已经成为我们生活与工作中不可或缺的一部分。然而&#xff0c;数据丢失的风险也随之增大。无论是由于误删除、误格式化、病毒感染还是其他意外情况&#xff0c;数据丢失都可能带来不小的损失。在这种情况下&#xff0c;数据恢复工具应运…

java学习之路-类和对象

前言 本文内容&#xff1a; 类的定义及其使用 this的引用 对象的构造及初始化 封装 static成员 代码块讲解 内部类 文章目录 1.类定义和使用 1.1了解什么是面向对象 1.2简单认识类 1.3定义类 1.4栗子 2.类的使用-类的实例化 2.1什么是实例化 2.2类和对象的说明 3.this引…

基因组de novo组装

分以下几个部分&#xff1a; CLR组装 HIFI组装 ONT组装 二、三代数据矫正 组装结果评估 一、CLR组装 下机数据&#xff1a; 主要用那个bam文件 软件&#xff1a;wtdbg2 第一步&#xff1a;bam转fasta文件 参考&#xff1a;https://www.jianshu.com/p/03c7eb11102d # 进行基…

WEB安全测试通常要考虑的测试点

1、问题&#xff1a;没有被验证的输入 测试方法&#xff1a; 数据类型&#xff08;字符串&#xff0c;整型&#xff0c;实数&#xff0c;等&#xff09; 允许的字符集 最小和最大的长度 是否允许空输入 参数是否是必须的 重复是否允许 数值范围 特定的值&#xff08;枚举型&a…