成人免费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

共享數據開發

2022-07-26 08:40:42

Java并發工具類

2022-08-02 06:31:32

Java并發工具類

2020-10-15 06:26:24

高并發場景冰河

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

面試面試官

2014-11-28 16:04:36

浪潮

2020-03-06 15:36:01

Redis內存宕機

2024-10-16 15:01:20

2022-07-15 08:22:42

對象符串鍵Symbol

2021-04-12 21:34:29

Redis故障數據

2024-01-10 15:27:58

SessionCookieWeb 應用
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 成人在线一区二区 | 精品福利在线 | www国产成人免费观看视频,深夜成人网 | 中文一区二区视频 | 亚洲视频一区二区三区四区 | 91黄色片免费看 | 欧美日韩一二区 | 免费久久久 | 久久精品 | 四虎首页| 男人的天堂在线视频 | 一区二区三区电影在线观看 | 欧美一区二区三区视频在线 | 亚洲一区二区在线视频 | 国产精品美女久久久久aⅴ国产馆 | 一级做a爰片性色毛片16 | 精品国产一区二区三区久久影院 | 亚洲精品国产成人 | 中文字幕成人在线 | 99re在线 | 免费视频中文字幕 | 99久久精品免费看国产高清 | 日本精品一区二区三区在线观看视频 | 久久黄视频 | 欧美一级免费片 | 日韩在线精品视频 | 国产一区二区精 | 久久99精品久久久久久 | 欧美在线一区二区三区四区 | 日韩中文字幕视频在线观看 | 亚洲精品乱码久久久久久9色 | 国产一区 | 欧美一区在线视频 | 欧美a区 | 中文字幕成人av | 国产精品日韩一区二区 | 色狠狠一区 | 爱草在线 | 婷婷精品 | 欧美亚洲国产精品 | 九九在线视频 |