当前位置: 首页 > news >正文

C++面试——多线程详解

C++11提供了语言层面上的多线程,包含在头文件<thread>中。它解决了跨平台的问题,提供了管理线程、保护共享数据、线程间同步操作、原子操作等类。C++11 新标准中引入了5个头文件来支持多线程编程,如下图所示:

 

多进程与多线程

多进程并发

使用多进程并发是将一个应用程序划分为多个独立的进程(每个进程只有一个线程),这些独立的进程间可以互相通信,共同完成任务。由于操作系统对进程提供了大量的保护机制,以避免一个进程修改了另一个进程的数据,使用多进程比使用多线程更容易写出相对安全的代码。

但是这也造就了多进程并发的两个缺点:

  1. 在进程间的通信,无论是使用信号、套接字,还是文件、管道等方式,其使用要么比较复杂,要么就是速度较慢或者两者兼而有之。

  2. 运行多个进程的开销很大,操作系统要分配很多的资源来对这些进程进行管理。

当多个进程并发完成同一个任务时,不可避免的是:操作同一个数据和进程间的相互通信,上述的两个缺点也就决定了多进程的并发并不是一个好的选择。所以就引入了多线程的并发。

多线程并发
多线程并发指的是在同一个进程中执行多个线程。
优点:

线程是轻量级的进程,每个线程可以独立的运行不同的指令序列,但是线程不独立的拥有资源,依赖于创建它的进程而存在。也就是说,同一进程中的多个线程共享相同的地址空间,可以访问进程中的大部分数据,指针和引用可以在线程间进行传递。这样,同一进程内的多个线程能够很方便的进行数据共享以及通信,也就比进程更适用于并发操作。

缺点:

由于缺少操作系统提供的保护机制,在多线程共享数据及通信时,就需要程序员做更多的工作以保证对共享数据段的操作是以预想的操作顺序进行的,并且要极力的避免死锁(deadlock)。

多线程理解

  • 单CPU内核的多个线程。

一个时间片运行一个线程的代码,并不是真正意义的并行计算。

图片

  • 多个cpu或者多个内核

可以做到真正的并行计算。

图片

1.3、创建线程

创建线程很简单,只需要把函数添加到线程当中即可。

  • 形式1:


std::thread myThread ( thread_fun);
//函数形式为void thread_fun()
myThread.join();
//同一个函数可以代码复用,创建多个线程
  • 形式2:


std::thread myThread ( thread_fun(100));
myThread.join();
//函数形式为void thread_fun(int x)
//同一个函数可以代码复用,创建多个线程
  • 形式3:


std::thread (thread_fun,1).detach();
//直接创建线程,没有名字
//函数形式为void thread_fun(int x)

 

http://www.lryc.cn/news/212358.html

相关文章:

  • matlab 布尔莎七参数坐标转换模型
  • Android---StartActivity启动过程
  • 隐私计算python实现Paillier同态加密
  • 代码随想录打卡第五十五天|● 300.最长递增子序列 ● 674. 最长连续递增序列 ● 718. 最长重复子数组
  • C# 创建Oceanbase ODBC数据源 DSN
  • C++ 常用函数汇总#include<algorithm>(3万字总结)
  • Google Archive Patch 基础应用代码记录
  • 机器学习——代价敏感错误率与代价曲线
  • 如何利用 ChatGPT 提升编程技能
  • ChatGPT:@EqualsAndHashCode(callSuper = false)是什么意思
  • docker部署的mariadb忘记密码
  • 一体化模型图像去雨+图像去噪+图像去模糊(图像处理-图像复原-代码+部署运行教程)
  • [java/力扣110]平衡二叉树——优化前后的两种方法
  • 吉他、班卓琴和贝斯吉他降分器:Arobas Music Guitar 8.1.1
  • cocos tilemap的setTileGIDAt方法不实时更新
  • 机器学习---使用 TensorFlow 构建神经网络模型预测波士顿房价和鸢尾花数据集分类
  • 铁合金电炉功率因数补偿装置设计
  • 表格识别软件:科技革新引领行业先锋,颠覆性发展前景广阔
  • 【Redis】高并发分布式结构服务器
  • 微信小程序拍照页面自定义demo
  • 单目标应用:进化场优化算法(Evolutionary Field Optimization,EFO)求解微电网优化MATLAB
  • 推荐算法面试
  • 长图切图怎么切
  • 动手学深度学习 - 学习环境配置
  • 洛谷 B2004 对齐输出 C++代码
  • seccomp学习 (1)
  • Linux指令【上】
  • RK3568-clock
  • 新恶意软件使用 MSIX 软件包来感染 Windows
  • 干货!数字IC后端入门学习笔记