首页 > 其他分享 >面试官:单核服务器可以不加锁吗?

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

时间:2024-09-18 09:02:16浏览次数:8  
标签:面试官 加锁 单核 Spring 线程 服务器 执行

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

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、设计模式、消息队列等模块。

标签:面试官,加锁,单核,Spring,线程,服务器,执行
From: https://www.cnblogs.com/vipstone/p/18417906

相关文章

  • 面试官问:你如何看待加班?
    面试官问:你如何看待加班?面试官问:你如何看待加班?这类问题是比较常见的,出现频率相当高。有些同学看到这样的问题,就会断定这家公司估计是经常加班的,绝对的不能去!!!其实也未必,不管你去哪个公司工作,都有可能遇到一些突然的,或者是要紧的时刻,不能就此否定这家公司长期存在加班文化。面......
  • 吊打面试官!业务架构的关键概念
    商业模式商业模式是帮助企业成功的“秘诀”,它通过整合企业内外部的多种要素,构建起一个全面、高效且具有独特竞争优势的运营体系。这一体系的目的是满足市场的需求,实现各利益相关者价值最大化,并确保企业的长期盈利能力。商业模式的核心架构由三个紧密相连的环节构成:创造价值、传......
  • 吊打面试官!从多维度理解架构
    大家好,我是汤师爷~在工作当中,我们经常会听到以下说法:产品负责人说,现在的业务架构太复杂,需要仔细梳理下。技术领导说,这个项目很复杂,需要做下系统架构方案评审。研发经理说,这次秒杀活动访问量非常大,需要用到高并发架构方案。一线研发说,互联网大厂都会用到微服务架构,我要学学微......
  • 面试官:线程池遇到未处理的异常会崩溃吗?
    首先,这个问题考察的是你对线程池execute方法和submit方法的理解,在Java线程池的使用中,我们可以通过execute方法或submit方法给线程池添加任务,但如果线程池中的程序在执行时,遇到了未处理的异常会怎么呢?接下来我们一起来看。1.execute方法execute方法用于提交一个不需要......
  • 面试产品经理,怎样描述过往经历,才能让面试官印象深刻?
    金三银四求职季,你是不是也有面试的冲动!但面试并不是头脑一热就能取得好结果,在此之前,必须得有周全的准备,才能应对好面试官的“连环问”!所以,给大家分享这篇产品经理面试干货文章,别忘记双击哦!今天文章的主要解答:产品经理面试有哪些基本流程和常见误区?以及我们该如何好自我介绍!......
  • JAVA面试官问你:CPU狂飙900%,该怎么处理?【转】
    首先,说明一下问题:CPU飙升200%以上是生产容易发生的场景场景:1:MySQL进程飙升900%大家在使用MySQL过程,想必都有遇到过CPU突然过高,或者达到200%以上的情况。数据库执行查询或数据修改操作时,系统需要消耗大量的CPU资源维护从存储系统、内存数据中的一致性。并发量大并且大量SQL性能低......
  • 因为不懂推测解码,被面试官鄙视了...
    我是丁师兄,专注于智能驾驶方向大模型落地,公众号:丁师兄大模型。大模型1v1学习,已帮助多名同学上岸国内外大厂前两天有个学员抱怨后天就要面试了,心里难免紧张。尽管他做了很多准备,但他还是担心面试官会问到像“大模型中的推测解码”这种复杂的技术问题。为了不在关键时刻掉链......
  • 面试官:如何实现线程池任务编排?
    任务编排(TaskOrchestration)是指管理和控制多个任务的执行流程,确保它们按照预定的顺序正确执行。1.为什么需要任务编排?在复杂的业务场景中,任务间通常存在依赖关系,也就是某个任务会依赖另一个任务的执行结果,在这种情况下,我们需要通过任务编排,来确保任务按照正确的顺序进行执......
  • 面试官:Vue中的过滤器了解吗?过滤器的应用场景有哪些?
    一、是什么过滤器(filter)是输送介质管道上不可缺少的一种装置大白话,就是把一些不必要的东西过滤掉过滤器实质不改变原始数据,只是对数据进行加工处理后返回过滤后的数据再进行调用处理,我们也可以理解其为一个纯函数Vue允许你自定义过滤器,可被用于一些常见的文本格式化p......
  • 面试官:SPA首屏加载速度慢的怎么解决?
    面试官VUE系列总进度:19/331:说说你对vue的理解?2:说说你对双向绑定的理解?3:说说你对SPA(单页应用)的理解?4:v-show和v-if有什么区别?使用场景分别是什么?5:Vue实例挂载的过程?6:请描述下你对vue生命周期的理解?在created和mounted这两个生命周期中请求数据有什么区别呢?7:为什么Vu......