对一个全局变量进行多线程并发 -- 或者 ++ 操作是否是安全的??是否是原子的??

news/2024/5/17 15:11:10

1.结论:

不是安全的,不是原子的

2.原因:

2.1 不是原子性的原因:

一个线程将一个全局变量--(减减)时候,需要以下几个步骤

第一步:将全局变量读到cpu的寄存器中,

第二步:cpu将全局变量进行减减操作,

第三步:将减完的值传给内存。

2.2 对一个全局变量进行多线程并发 -- 或者 ++ 操作不是安全的原因:

假设情景:

原来的数据是100,对多线程(有线程1和线程2)对100进行减减操作。

原来的数据是100,线程操作内容是--,线程1是只--了一次,正准备把cpu中的数据传到内存中,就被线城2顶了上来,此时从内存中加载到cpu的从100减到了99,线程1把此时cpu中的99拿到自己的tcb中,当做自己上下文(99),

线程2多次--(进行了1.2.3步骤),减到了10,最后把cpu中的数据(10)加载到了内存中

线程1此时顶了回来,恢复了上下文(99),把自己的上下文(99)加载到了cpu里,最后把值(99)返回到了内存中.

导致线程二做了无用功。

3.扩展

判断的时候,也会经历将值从内存中传到cpu,由cpu进行判断,再讲cpu中的值传入到内存中。

将--代码和判断代码放在一块,挑战一下:

3.2代码示例:

全局变量是: ticket

3.2. 难点解析

第一次判断时候进来是1,返回到内存中也是1,第一次的减减的时候,返回到内存的是0。第二次判断的时候进来的时候虽然也是1,但是减减的时候会重新从内存中读取数据,此时内存中的数据是0,减减操作会使其成为负数。

4.线程将共享数据加载到cpu的本质:

把数据内容,变成自己的上下文——以拷贝的方式,单独给自己那一份。


http://www.mrgr.cn/p/25223008

相关文章

异常处理、接口文档、 jwt介绍、

【异常处理 详见excel的异常处理的源码总结】# APIView--->dispatch--->三大认证,视图类的方法,如果出了异常, # 会被异常捕获,捕获后统一处理 # 关键就是dispatch里面的 response = self.handle_exception(exc) 这行代码# drf 内置了一个函数,只要上面过程出了异常…

Python用于比较数据结构并生成差异报告的工具库之data-diff使用详解

概要 Python的data-diff库是一个用于比较数据结构并生成差异报告的工具。它可以处理各种数据类型,如字典、列表、集合等,使得开发者能够快速识别数据之间的差异。 安装 通过pip可以轻松安装data-diff: pip install data-diff特性 支持多种数据类型:能够比较字典、列表、…

富文本编辑器(wangEdit)+(jquery.wordexport)实现web版在线编辑导出

小插曲:最开始的方向是Html5的contenteditable"true"的文档可编辑属性。只能修改文档文字内容,不能修改样式,如修改字体,字号,颜色等。于是用了第一款(quil)富文本插件。只能说一般&a…

栈3: 括号匹配

栈3: 括号匹配自定义数据结构 typedef struct MYCHAR{LinkNode node;char* pAddres; //数据域int index; // } MyChar;判断左右括号 int IsLeft(char c){return c==(; }int IsRight(char c){return c==); }创建栈结点 MyChar* CreatMyChar(char *p){MyChar* mychar = (MyChar*)…

“百度杯”CTF比赛 九月场-123

“百度杯”CTF比赛 九月场 123 题目类型:web 题目描述:12341234,然后就解开了,打开靶机是一个会员登陆界面:解题方法:先查看一下网页源码:这里说用户信息都在user.php里面,然后我们访问一下user.php:发现并没有任何信息 扫描一下它的目录文件看一下:扫出了一个user.p…

Redis(Windows版本下载安装和使用)

天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…

DedeCMS让channelartlist支持currentstyle属性

织梦一二级导航菜单被点击顶级栏目高亮(加class)解决方法,DedeCMS让channelartlist支持currentstyle属性。 dedecms默认模板的channelartlist是不支持currentstyle属性的。currentstyle属性在导航中应用的比较多,可以实现循环调用栏目后,当前页<li>标签获得一个class=…

实验一-原型设计 微信卡包页面

微信卡包页面-原型设计分享 一、实验题目:原型设计 二、实验目的:掌握产品原型设计方法和相应工具使用。 三、实验要求对比分析墨刀、Axure、Mockplus等原型设计工具的各自的适用领域及优缺点(至少3条)。 1.墨刀:~适用领域:墨刀适用于快速原型设计和协作,特别是在移动应…

栈2: 链式存储

栈2: 栈的链式存储栈的结点 //链式栈的结点 typedef struct LINKNODE{struct LINKNODE *next; } LinkNode;链式栈的结构 //链式栈 typedef struct LINKSTACK{LinkNode head;int size; } LinkStack;栈的初始化 LinkStack* Init_LinkStack(){LinkStack *stack = (LinkStack*)mall…

【EM算法】算法及注解

EM算法又称期望极大算法&#xff0c;是一种迭代算法&#xff0c;每次迭代由两步组成&#xff1a;E步&#xff0c;求期望&#xff08;expectation&#xff09;&#xff1b;M步&#xff0c;求极大&#xff08;maximization&#xff09;。 算法背景 如果概率模型的变量都是观测变…

【VMware ESXi】新版VMware Host Client独立客户端Beta版发布。

VMware by Broadcom 推出了新的VMware Host Client 独立版客户端,用于代替VMware Host Client(Html5)来管理ESXi。VMware by Broadcom 推出了新的VMware Host Client 独立版客户端(Beta),用于代替VMware Host Client(Html5)来管理ESXi。同时,当前VMware Host Client不…

第二代长安X5 PLUS 2024款车机绕开限制安装第三方APP

测试车型:第二代长安X5 PLUS 2024款智尊型 系统版本:OnStyle 5.2.0 安卓版本:9.0 Pie 文章内容仅供参考,不同车型不同版本可能操作不同 一、拨号页 ##888 ,输入密码进入工厂模式 二、工厂模式动态密码规则:4位,和当前时间有关,24小时制,1、2位位当前分钟整十数,3、4位…

【机器学习】《ChatGPT速通手册》笔记

文章目录 第0章 前言第1章 ChatGPT的由来&#xff08;一&#xff09;自然语言处理任务&#xff08;二&#xff09;ChatGPT所用数据数据大小&#xff08;三&#xff09;ChatGPT的神经网络模型有175亿个参数&#xff08;四&#xff09;模型压缩 方案 第2章 ChatGPT页面功能介绍&a…

Day3 权限管理

Day3 权限管理 这里会总结构建项目过程中遇到的问题&#xff0c;以及一些个人思考&#xff01;&#xff01; 学习方法&#xff1a; 1 github源码 文档 官网 2 内容复现 &#xff0c;实际操作 项目源码同步更新到github 欢迎大家star~ 后期会更新并上传前端项目 创建管理员…

栈1: 栈的顺序存储

栈: 顺序存储栈是一种先进后出(First In Last Out,FILO)的数据结构 如果你将两个元素压入栈,先加入的元素将在后加入的元素之后出栈栈顶元素值为null(未满时)定义栈的数据结构 #define MAX_SIZE 1024 //利用数组模拟栈的顺序存储 typedef struct sqStack{void *data[MAX_SIZE]…

C#医学实验室/检验信息管理系统(LIS系统)源码

目录 检验系统的总体目标 LIS主要包括以下功能&#xff1a; LIS是集&#xff1a;申请、采样、核收、计费、检验、审核、发布、质控、耗材控制等检验科工作为一体的信息管理系统。LIS系统不仅是自动接收检验数据&#xff0c;打印检验报告&#xff0c;系统保存检验信息的工具&a…

云原生之在kubernetes集群下部署mysql应用

一、Mysql介绍数据库(Database)是按照数据结构来组织、存储和管理数据的仓库。MySQL是一种开源的关系型数据库管理系统,可将数据保存在不同的表中,而不是将所有数据放在一个大的仓库内,从而加快了访问速度并提高了灵活性。MySQL 使用了标准的 SQL 语言形式。支持大型的数据…

Trino418版本动态加载catalog不需要重启集群修改思路及实现2

原来没事的时候改了一个这样的功能,当时也没有仔细研究,后来也没继续弄。详细可以参考 https://www.cnblogs.com/liuzx8888/p/17635913.html 当时有1个问题:新增数据源需要每一个节点都去调取API注册,这样非常麻烦,最近闲下来又研究了一下,在原先的基础上做了一些改造。 …

小程序生态是更灵活构建超级App的方式

第三方中立应用市场作为一种新兴模式,打破了现有应用市场的垄断格局,为开发者和用户带来了新的选择和机遇。它拥有连接超级App流量及用户的独特优势,能够聚合流量、提升用户体验、创新模式、保障数据安全,并有望成为应用市场发展的新趋势。互联网从1.0发展至今,已经经历了…

游戏服务器DDOS克星-抗D盾(游戏盾)

随着网络游戏市场的不断扩大和发展&#xff0c;游戏服务器遭受DDOS攻击的频率也在逐年增加。DDOS攻击的主要目的是使游戏服务器瘫痪&#xff0c;使得游戏无法正常进行&#xff0c;导致游戏运营商巨额损失。鉴于此&#xff0c;针对游戏服务器的防DDOS攻击技术德迅云安全自主研发…