Linux 线程并发运行

一、并发与并行

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

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

二、线程并发运行

代码如下:

在这里插入图片描述

代码分析:

主函数中第一个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。就属于是并行运行。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值