对线程争抢的理解-2021-02-02

6.对线程争抢的理解

线程是抽象的概念,其实线程是一个软件执行的过程,早期:计算机是单线程的:即一个cup只能执行一个程序,执行完成功后,才能执行第二个程序;为了提高计算机使用效率,后来的计算机支持同时进行多个程序的并发运行。每个程序运行时,都会开辟自己的内存,网络IO,键盘输入,屏幕输出等。为了管理每个程序运行时的状态,操作系统为每个程序创建一个id,叫:threadId,程序执行过程中的状态,数据等通过:threadId管理。单Cpu计算机,同一时刻只能运行一个程序,所以为了支持同时运行多个程序,就必须加入:调度程序。操作系统来调度哪个程序运行。调度思路大致分为:1.先来先执行;2.平均时间片;3.剩余执行时间。达到的目的就是:一个程序可能运行不完,就会被调度程序(操作系统)叫停,把cpu的运行结果暂存,清空cup寄存器数据,把其他状态都暂存,等待下次再运行。调度系统叫停程序后,会让其他程序执行,来回往复,直到程序运行结束。操作系统不断对程序叫停和复工的过程,就是多线程环境的争抢资源。其实线程本身没有争,也没有抢,都是调度程序惹的祸。

举例

公共资源:int i = 0;

程序代码:i++

线程1 ---> 调度程序让它执行 ----> 从内存中将 i 的值0读取cpu寄存器,准备运算++

                 调度程序说:时间到了,不能让你运行了,你把东西收拾收拾,滚。

                 线程1:很委屈,只好把cpu寄存器中的0,暂存起来,等待下一次执行。

线程2 ----> 调度程序说:"该你执行了" ---> 从内存中将 i 的值0读取cpu寄存器,准

                  备运算++, 这时因为执行片段还没有结束,线程2继续执行。cpu运算得出结果:1,线程2 把:1 :写入内存中;

                   调度程序说:时间到了,不能让你运行了

线程1 ---> 调度程序说:"该你执行了" --> 线程1 把上次暂存的0写入cpu寄存器,执行++运算,cpu运算得出结果:1

由此可见:2个线程分别对变量 i 进行++ 运算,结果却只是1,而不是想象中的2. 就是调度程序惹的祸

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

绿竹痕

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值