成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

面試官:單核服務器可以不加鎖嗎?

開發 前端
因為在單核服務器上也會有線程切換,如果不加鎖,那么線程切換后,另一個線程就可以訪問其他線程未操作完的共享變量,這就會導致操作的共享變量發生數據覆蓋的問題,所以是需要加鎖。

今天有位同學問了磊哥一個問題,大概的意思是“單核服務器可以不加鎖嗎?”,我覺得很有意思,所以在這里就和各位探討一下:

1. 問題答案

先說我的理解,單核服務器仍然需要加鎖。

因為在單核服務器上也會有線程切換,如果不加鎖,那么線程切換后,另一個線程就可以訪問其他線程未操作完的共享變量,這就會導致操作的共享變量發生數據覆蓋的問題,所以是需要加鎖。

例如,以下案例,線程 T1 和線程 T2 都要執行 i++ 操作,i 的初始值為 0,所以正確的執行結果應該是 2。但如果不加鎖,即使在單核服務器下也會造成數據覆蓋問題,最終的執行結果為 1 的情況,具體執行流程如下:

2. 原因分析

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

  • 查詢 i 的值。
  • 執行 i+1 修改操作。
  • 將結果賦值給 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 變量


從上述執行流程可以看出,即使在單核服務上,依然會發生線程切換的問題。而線程切換就可能會導致數據覆蓋的問題,這就是線程安全問題,所以單核服務器也要加鎖。

責任編輯:姜華 來源: 磊哥和Java
相關推薦

2020-08-10 07:49:51

服務器

2022-10-10 12:31:37

服務器性能

2024-07-22 14:09:22

@AsyncJava

2023-08-13 16:17:31

2023-07-11 16:01:47

共享數據開發

2020-10-15 06:26:24

高并發場景冰河

2022-07-26 08:40:42

Java并發工具類

2022-08-02 06:31:32

Java并發工具類

2019-07-24 11:52:11

CPU服務器面試官

2022-05-23 08:43:02

BigIntJavaScript內置對象

2022-06-30 08:14:05

Java阻塞隊列

2022-07-11 10:47:46

容器JAVA

2024-03-12 14:36:44

微服務HTTPRPC

2015-08-13 10:29:12

面試面試官

2023-02-26 17:21:21

2020-03-06 15:36:01

Redis內存宕機

2022-07-15 08:22:42

對象符串鍵Symbol

2024-10-16 15:01:20

2014-11-28 16:04:36

浪潮

2020-05-11 14:55:44

CSS鼠標前端
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 精品一区二区三区免费毛片 | 久久99久久 | 一级片av| 黄色一级视频免费 | 精品国产一区探花在线观看 | 欧美日韩一区二区在线观看 | 天天躁日日躁狠狠躁白人 | 国产精品一区二区免费 | 精品久久久久一区二区国产 | www免费视频 | 欧美色影院 | www.99精品| 欧美精品在线免费观看 | 日韩在线小视频 | 日本高清中文字幕 | 日本亚洲欧美 | 特黄色毛片 | 国产精品一区二区不卡 | 成人免费视频网站在线观看 | 国产乱码精品一区二区三区中文 | 伊人91在线| 日本不卡免费新一二三区 | h视频在线免费 | 国产精品久久久久久福利一牛影视 | 久久69精品久久久久久久电影好 | 国产精品久久久久久久久久久久午夜片 | 久久久久亚洲视频 | 日韩一区二区av | 久久久久国产精品人 | 午夜精品久久久久久久久久久久 | 日韩欧美视频免费在线观看 | 国产精品无码久久久久 | 91精品国产91久久久久久最新 | 男女视频在线免费观看 | 亚洲国产一区在线 | va在线| 先锋资源吧| 欧美综合一区二区三区 | 国产精品久久久久久一区二区三区 | 欧美网站一区二区 | 久久在视频 |