Linux 线程并发运行

news2024/9/20 5:53:47

一、并发与并行

并行:两个线程在同一时刻同时执行,需要有两个处理器。

并发:两个线程在同一时刻交替执行,只有一个处理器。
在这里插入图片描述
并行是一种特殊的并发。

二、线程并发运行

代码如下:

在这里插入图片描述

代码分析:

主函数中第一个for循环,pthread_create了5次,这5次i的值一次被改为0,1,2,3,4,但是在这个变化的过程中,被创建的5个线程都没有去获取i的值,因为这5个线程都还没有执行到获取i的值的那一行代码,等主函数中执行到第28行的时候,它们才会执行获取i的值的那一行代码。也就是说被创建的新线程在for循环结束后才会去获取i的值,并不是在for循环进行的时候去获取i的值。

运行结果:

在这里插入图片描述

可以看出,使用多线程,程序运行的结果具有不确定性。

以下结果就是多线程并发运行出现的现象:

在这里插入图片描述
结果分析:

两次输出的结果值一样顺序不一样的原因:

这是因为被创建的线程函数中index获取了i的值并第一次输出了i的值,睡眠了1秒,这个时候第二次输出的i的值就是在第一次输出i的值之前index已经获取到的值,所以第二次输出的i的值和第一次输出的i的值是一样的,只是第二次输出i的值的顺序和第一次输出i的值的顺序不一样。顺序不一样是因为多线程运行的时候是并发运行,多个线程同时执行,执行顺序不确定。

输出两个3但是没有输出2的原因:

这是因为在代码中主线程中i的值在不断变化,被创建的线程函数在获取i的值的时候获取的是那一刻i的值,主线程中的从pthread_create地方开始才会有多条执行路径,pthread_create连续执行5次就是连续给系统提交要创建5个线程,系统要依次去启动这5个线程,几乎在同一时间这5个线程被陆陆续续启动,启动之后这5个线程都陆陆续续去获取i的值,这5个线程在获取i的值得时候那一刻i的值是多少就获取到多少。其中有两个线程在获取i的值的时候一起获取i的值,这时候它们获取到的i的值都为3,也就是说,有两个线程在同一刻去获取i的值,这一刻i的值为3,这两个线程同时执行输出值为3。

当前Linux系统中有4个处理器:
在这里插入图片描述
所以两个线程有可能发生并行,就像上边两个线程在同一时刻去获取i的值,这一刻i的值为3,这两个线程同时执行输出值为3。就属于是并行运行。

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

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

相关文章

Excel/PowerPoint柱状图条形图负值设置补色

原始数据: 列1系列 1类别 14.3类别 2-2.5类别 33.5类别 44.5 默认作图 解决方案 1、选中柱子,双击,按如下顺序操作 2、这时候颜色会由一个变成两个 3、对第二个颜色进行设置,即为负值的颜色 条形图的设置方法相同

智能记账分享,轻松记录、分析和保存收支明细

在现代生活中,财务管理变得越来越重要。要想清晰地了解个人或家庭的财务状况,记录、分析和保存收支明细是必不可少的任务。现在,我们为你带来了一款智能记账分享工具,让你轻松记录、分析和保存收支明细 首先,我们要打…

一文带你了解如何在Java中操作Redis

文章目录 前言一、 Redis客户端简介1. Redis客户端分类2. Spring 整合 Redis 的两种方式 二、 使用 Jedis 操作 Redis1. Jedis的maven坐标2. 使用Jedis操作Redis的步骤3. Jedis 操作 Redis 示例 三、 使用 Spring Data Redis 操作 Redis1. Spring Data Redis 的 maven 坐标2. s…

【C语言】写一个程序,输入数量不确定的【0,9】范围内的整数,统计每一种数字出现的次数,输入-1表示结束

题目 写一个程序&#xff0c;输入数量不确定的【0,9】范围内的整数&#xff0c;统计每一种数字出现的次数&#xff0c;输入-1表示结束 代码 #include<stdio.h> int main() {int x;int i;int a[10];for(i0; i<10; i){//初始化数组 a[i] 0;}scanf("%d",&am…

Unity VR:XR Interaction Toolkit 输入系统(Input System):获取手柄的输入

文章目录 &#x1f4d5;教程说明&#x1f4d5;Input System 和 XR Input Subsystem&#xff08;推荐 Input System&#xff09;&#x1f4d5;Input Action Asset⭐Actions Maps⭐Actions⭐Action Properties&#x1f50d;Action Type (Value, Button, Pass through) ⭐Binding …

ARM 配置晶振频率

文章目录 前言串口乱码问题定位内核修改晶振频率uboot 修改晶振频率番外篇 前言 上篇文章《ARM DIY 硬件调试》介绍了 DIY ARM 板的基础硬件焊接&#xff0c;包括电源、SOC、SD 卡座等&#xff0c;板子已经可以跑起来了。 但是发现串口乱码&#xff0c;今天就来解决串口乱码问…

Java-数组

什么是数组 数组&#xff1a;可以看成是相同类型元素的一个集合。在内存中是一段连续的空间。 在java中&#xff0c; 数组中存放的元素其类型相同数组的空间是连在一起的每个空间有自己的编号&#xff0c;起始位置的编号为0&#xff0c;即数组的下标。 数组的创建及初始化 数…

FL Studio21最新版本升级中文语言教程

FL中文提供了跨版本升级&#xff0c;用户可以通过下载21入门版或其他非完整版的版本&#xff0c;升级为更高的版本&#xff0c;解锁更多的插件&#xff0c;下面为大家介绍在下载升级服务后&#xff0c;如何进行升级版本。 FL Studio 21 Win-安装包下载如下:https://wm.makeding…

CTF工具隐写分离神器Binwalk安装和详细使用方法

binwalk安装 1.Binwalk 介绍&#xff1a;2.Binwalk下载&#xff1a;3.Windows安装&#xff1a;4.Linux下载安装&#xff1a;5.Binwalk基本用法&#xff1a;6.Binwalk案例展示&#xff1a;7.Binwalk总结&#xff1a; 1.Binwalk 介绍&#xff1a; Binwalk 是用于搜索给定二进制镜…

Java之线程的状态

文章目录 一、线程状态二、代码演示1. Threadstate 类2. SleepUtils 类3. 运行示例 三、参考资料 一、线程状态 Java线程在运行的生命周期中可能处于下图所示的6种不同的状态,在给定的一个时刻线程只能处于其中的一个状态。 Java线程的状态 状态名称说明NEW初始状态&#xff0…

QCustomPlot的X轴是时间轴的曲线绘制

主要设置X轴的参数 SharedPointer<QCPAxisTickerTime> timeTicker(new QCPAxisTickerTime); timeTicker->setTimeFormat("%h:%m:%s");demo如下 Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);dataTimer …

53 个 CSS 特效 1

53 个 CSS 特效 1 预计是会跟着教程做完 53 个小项目10 个大型的 Responsive 项目&#xff0c;预览地址在http://www.goldenaarcher.com/html-css-js-proj/&#xff0c;git 地址&#xff1a;https://github.com/GoldenaArcher/html-css-js-proj 实用性有加备注&#xff0c;可…

漏洞指北-VulFocus靶场专栏-初级02

漏洞指北-VulFocus靶场02-初级 初级005 &#x1f338;phpunit 远程代码执行 (CVE-2017-9841)&#x1f338;step1&#xff1a;进入漏洞页step2&#xff1a; burpsuite 抓包,等待请求页&#xff0c;获得flag 初级006 &#x1f338;splunk 信息泄露 &#xff08;CVE-2018-11409&am…

【操作系统】24王道考研笔记——第三章 内存管理

第三章 内存管理 一、内存管理概念 1.基本概念 2.覆盖与交换 覆盖技术&#xff1a; 交换技术&#xff1a; 总结&#xff1a; 3.连续分配管理方式 单一连续分配 固定分区分配 动态分区分配 动态分区分配算法&#xff1a; 总结&#xff1a; 4.基本分页存储管理 定义&#xf…

基于空间的图卷积神经网络:GNN

目录 欧氏空间中神经网络发挥巨大最作用&#xff0c;DNA&#xff0c;知识图谱三维或者多维空间不行 邻接矩阵实现图结构的矩阵化表示&#xff1a;造梦师 局和操作实现层内消息传递&#xff1a;带线的连接机传递消息 GCN通过邻域聚合实现特征提取 SVM支持向量机 ​编辑 硬分…

浅析Java设计模式之四策略模式

title: 浅析Java设计模式之四策略模式 date: 2018-12-29 17:26:17 categories: 设计模式 description: 浅析Java设计模式之四策略模式 1. 目录 1. 目录2. 概念 2.1. 应用场景2.2. 优缺点 2.2.1. 优点2.2.2. 缺点 3. 模式结构4. 样例 4.1. 定义策略4.2. 定义具体策略4.3. 定义…

用 VB.net,VBA 两种方式 读取单元格内的 换行数据,并出力到 CSV文件

用 VB.net&#xff0c;VBA 两种方式 读取单元格内的 换行数据&#xff0c;并出力到 CSV文件 需求 如下图所示&#xff0c;为了生成csv文件导入数据库&#xff0c;需要将下图 的 1 和 2 拼接成 如下 3 所示的一行数据&#xff0c; 开头为 1 &#xff0c;往后为 2 的换行数据 将换…

整理mongodb文档:批量操作

个人博客 整理mongodb文档:批量操作 个人公众号&#xff0c;求关注&#xff0c;文章如有不明&#xff0c;请指出。 文章概叙 本文讲的是关于bulkwrite的用法&#xff0c;依旧是在shell下使用。 关于批量操作 Performs multiple write operations with controls for order …