面试官:单核服务器可以不加锁吗?

news/2024/11/15 0:24:37/文章来源:https://www.cnblogs.com/vipstone/p/18417906

今天有位同学问了磊哥一个问题,大概的意思是“单核服务器可以不加锁吗?”,我觉得很有意思,所以在这里就和各位探讨一下:

1. 问题答案

先说我的理解,单核服务器仍然需要加锁

因为在单核服务器上也会有线程切换,如果不加锁,那么线程切换后,另一个线程就可以访问其他线程未操作完的共享变量,这就会导致操作的共享变量发生数据覆盖的问题,所以是需要加锁。

例如,以下案例,线程 T1 和线程 T2 都要执行 i++ 操作,i 的初始值为 0,所以正确的执行结果应该是 2。但如果不加锁,即使在单核服务器下也会造成数据覆盖问题,最终的执行结果为 1 的情况,具体执行流程如下:

2. 原因分析

因为 i++ 并不是原子操作,它的执行要分为以下 3 步:

  1. 查询 i 的值。
  2. 执行 i+1 修改操作。
  3. 将结果赋值给 i 变量。

如果是加锁操作,那么线程可以一个个执行,首先某一个线程先把 i 修改为 1,然后另一个线程再次基础上将结果修改为 2。

但如果不加锁,那么就会导致下面的问题:

线程 1 线程 2
t1 读取到 i 的值为 0
t2 读取到 i 的值为 0
t3 执行 +1 操作,修改 i 为 1
t4 将结果 1 赋值给 i 变量
t5 执行 +1 操作,修改 i 为 1
t6 将结果 1 赋值给 i 变量

从上述执行流程可以看出,即使在单核服务上,依然会发生线程切换的问题。而线程切换就可能会导致数据覆盖的问题,这就是线程安全问题,所以单核服务器也要加锁

课后思考

除了锁机制外,还有哪些手段可以保证线程安全?

本文已收录到我的面试小站 www.javacn.site,其中包含的内容有:Redis、JVM、并发、并发、MySQL、Spring、Spring MVC、Spring Boot、Spring Cloud、MyBatis、设计模式、消息队列等模块。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[CTFshow] 文件包含 78~88,116~117

web78 if(isset($_GET[file])){$file = $_GET[file];include($file); }else{highlight_file(__FILE__); }php伪协议,data:// 数据流封装器,以传递相应格式的数据。通常可以用来执行PHP代码 ?file=data://text/plain,<?=system(ls)?> ?file=data://text/plain,<?…

如何获取并展示PDD商品的详细信息?

在数字化时代,获取并展示PDD商品的详细信息对于电商运营者来说至关重要。这不仅有助于提升用户体验,还能增强商品的转化率。以下是一些有效的方法和策略,可以帮助你获取并展示PDD商品的详细信息。利用API接口 PDD提供了丰富的API接口,允许开发者获取商品的详细信息。通过AP…

重点区域人员徘徊识别监测系统

重点区域人员徘徊识别监测系统对监控画面中重要区域进行实时检测分析。当重点区域人员徘徊识别监测系统检测到一些人徘徊停留时,SuiJi-Ai系统立即报警,并提醒相关负责人妥善处理同时将报警截图和视频保存到数据库中生成表格。SuiJi-Ai重点区域人员徘徊识别监测系统主要通过现…

章13——包装类——Math类

常用方法 均为静态1、random 默认下返回 0 到 1 的随机数(前闭后开) 2、如取 2->7 之间的随机数: int a = (int)(2 + (5+1)*Math.random()); //+1的原因:(int)会舍去小数,且 random 的取值前闭后开,如果不 +1 最大只能取到6

新能源汽车如何更好地落地供应商伙伴协同系统管理?

近年来,我国新能源汽车业得到快速发展,从新能源汽车制造的产业链来说,包括上中下游,其中: 上游产业主要包括原材料供应和关键零部件生产两大部分: 原材料供应:主要为矿产资源和化工材料。 关键零部件生产:包括动力电池、电机及控制器、电池管理系统(BMS)等。中游产业…

安全帽佩戴识别算法

安全帽佩戴识别算法采用SuiJi-AI人工智能深度学习技术+计算机智能视觉识别算法,且通过规模化的安全帽数据识别训练。安全帽佩戴识别算法借助现场已有的监控摄像头对监控画面中人员着装行为进行实时分析识别。假如检测人员不戴安全帽,SuiJiAi将立即记录和警报,并可将纪录数据…

徘徊行为AI智能分析预警系统

徘徊行为AI智能分析预警系统可以立即对视频监测区域进行实时分析,自动识别监测监控画面中同一角色的来回进出频率,徘徊行为AI智能分析预警系统对多次进出徘徊人员实时检测预警,弥补人为因素的监督盲点。徘徊行为AI智能分析预警系统真正提高了安全监控的效率,可以尽快发现违…

人员徘徊识别系统

人员徘徊识别系统利用现场已有监控摄像头可以实时剖析监控画面中人员异常徘徊行为,当人员徘徊识别系统识别到特殊重要区域(危险区域)附近出现人员来回反复停留时,系统会立即搜抓拍预警并同步异常违规信息到后台,及时通告有关人员留意出现异常的目标,方便及时到现场处理。…

设置socks5代理:访问远程设备所在网络中的所有服务

部署Gemini Gemini使用教程 - 迅捷网络[来送福利] - 博客园 (cnblogs.com) 1.http和socks5代理的区别 2.哪些系统和软件支持socks5代理 1. 操作系统 许多操作系统本身就提供对 SOCKS5 代理的支持,或者可以通过配置或额外的软件来实现 SOCKS5 代理功能。Windows:Windows 原生网…

WiFi基础(四):WiFi工作原理及WiFi接入过程

liwen01 2024.09.16 前言 802.11 无线 WiFi 网有三类帧:数据帧、管理帧、控制帧。与有线网相比,无线 WiFi 网会复杂很多。大部分应用软件开发对 WiFi 的控制帧和管理帧了解得并不多,因为它们在物理层和数据链路层就已经被处理了,上层应用很少能感知到。 一般是在设备出现 W…

监狱视频行为分析监控系统

监狱视频行为分析监控系统利用监狱现场已有的监控摄像头对提审室、监室内、放风场所、劳动场所、禁闭室等重要场景日常安保监控画面进行分析,监狱视频行为分析监控系统对监控画面中出现超出独特警员界限、出现异常徘徊、出现晚间起身、出现异常激烈运动、出现异常集聚等行为现…

人员徘徊识别智能预警系统

人员徘徊识别智能预警系统利用计算机视觉深度学习算法+边缘计算视频分析技术,对重要地区马上开展7*24h实时监测,一旦发现摄像头图片中有些人犹豫不定,人员徘徊识别智能预警系统会及时抓拍预警,并保存异常徘徊记录,便于之后查验、调研和收集证据,进而更有效的协助后台安全…