首页 > 其他分享 >多线程操作共享资源(如全局变量)原理

多线程操作共享资源(如全局变量)原理

时间:2023-03-26 10:56:07浏览次数:36  
标签:全局变量 变量 ++ 共享资源 线程 寄存器 多线程 读取

CPU对变量的计算分为三个步骤:

  1. 从内存读取变量到寄存器(如add寄存器)

  2. 将读取到的变量进行计算

  3. 将寄存器中计算的值写入内存

 

如有两个线程(线程1和线程2)对共享资源(全局变量)a=0进行自增操作(a++),可能出现如下情况:

  线程1进行a++时,会将变量a读取寄存器,在对变量a进行计算的时候,cpu分配给线程1的时间片到了,这时线程1将阻塞,a = 0,cpu会将变量的值和状态等存起来(供其再次获得时间片使用);

  这时线程2将运行,cpu给线程2的时间片足够将a++操作执行完(即从内存读取变量到寄存器、将变量加1、再将1写入到a的地址中),现在a=1,线程2结束;

  这时线程1有获得时间片,从阻塞的地方继续执行(即将变量a加1、再将1写入a的地址),这样原先a = 1被线程1重新赋值为1

标签:全局变量,变量,++,共享资源,线程,寄存器,多线程,读取
From: https://www.cnblogs.com/zj-studyrecoding/p/17256824.html

相关文章

  • vue.js客服系统实时聊天项目开发(一)路由与子路由-全局变量-elementui搭建基本框架
    Vue应用程序设置一些基本配置,包括使用依赖项,设置路由,挂载组件等。这样就可以使用Vue框架开发应用程序了先来看看我的客服系统项目的package.json{"name":"VueLiveChat",......
  • Java多线程
    一、多线程简介 Java多线程是指在一个程序中同时执行多个线程(线程就是一条执行路径)。Java中的多线程可以提高程序的运行效率和并发性,通常用于执行一些耗时的操作或需要同......
  • 多线程sigpipe
    之前记录过socket读写异常相关情况,socket链接错误以及原因以及信号相关处理:多线程信号处理目前调试引擎时候出现了 错误;signalSIGPIPE,Brokenpipe一开始以为是没......
  • 全局变量与局部变量理解
     1.简单来说在 函数里边定义的变量是局部变量,在函数外边访问不到;全局变量是在函数外边的,在函数内外都可以被访问;vara=10;functiontest(){......
  • 多线程
    一、线程1、概念线程在一个进程的内部,要同时干多件事,就需要同时运行多个“子任务”,我们把进程内的这些“子任务”叫做线程是操作系统能够进行运算调度的最小单位。它......
  • 2 - 线程 - Windows 10 - CPython 解释器 - 多线程并行(实际并发)
    @目录一、线程和进程介绍进程基本概念面向线程设计的系统内部解析-用户态/内核态线程基本概念二、对进程线程并发并行的实际运行过程的理解:CPython多线程争抢GIL——......
  • 日志之MDC和异步多线程间传递线程id
    目录1MDC1.1简介1.2MDC坐标和使用1.3主要方法2多线程间使用2.1MDC工具类2.2拦截器定义和配置2.3Java线程池中使用2.3.1配置线程池2.3.2使用ExecutorCompletionSe......
  • Java多线程之ExecutorCompletionService
    目录1ExecutorCompletionService1.1简介1.2原理1.3Demo示例1.3.1未使用ExecutorCompletionService1.3.2使用ExecutorCompletionService1.4深入分析说明1.4.1所有方......
  • qt 多线程 moveToThread 的一个骚操作
    moveToThread 相当于是一个多线程的阻塞函数,本案例可多次点击按钮,多次触发,这个信号触发类似于内部建立一个队列,处理函数会按照顺序处理信号 test_moveToThread.p......
  • 爬虫进阶之多线程爬虫问题详解
    大多数正常人在下载图片的时候都是一个一个点击保存,图片越多花费的时间越多,大大的降低了工作效率。如果是学了爬虫的,一定会想到多线程来自动下载保存图片。多线程介绍:多......