日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

你管这叫线程安全?

發(fā)布時間:2023/12/4 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 你管这叫线程安全? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

來來來,面試八股文?今天我們從什么叫"線程安全"聊起?文末"邊吃邊聊"。

今日份的干糧:

1.什么叫線程安全?2.線程安全與變量的關系??變量又與堆/棧/靜態(tài)存儲區(qū)有密切關系


什么叫線程安全?

我們以常見的一行代碼i++?,i--?為例, 計算機的操作姿勢可能與你想象的不一樣。

在大多數計算機中, 給變量自增自減并不是原子操作, 需要下面三步:
① 將變量值加載進寄存器
② 寄存器自增/自減值
③ 將寄存器值加載回原變量

多線程環(huán)境下,如果你不使用一些原子鎖操作:
線程A (?i++?)可能只執(zhí)行了前面兩步后,之后CPU輪詢切換到其他線程或者線程A被搶占CPU;線程B (?i--?)欻欻執(zhí)行完所有的三步;

當線程A重新獲得CPU,執(zhí)行第三步, 一下子影響了線程B的執(zhí)行預期。

上圖栩栩如生、動靜相宜地描述了 啥叫線程安全,這就是線程不安全! ??

你能遇到的問題,在平臺這里都不叫問題。
上面的問題可以使用原子鎖Interlocked, https://docs.microsoft.com/en-us/dotnet/api/system.threading.interlocked?view=net-5.0。

更多的關于線程安全的八股文 (請看這個,這個我面試騰訊考過,這個題目O了)

線程安全?#變量#

線程安全的著力點,或者說問題的出發(fā)點是變量

------
棧區(qū)(stack)由編譯器自動分配釋放 ,存放函數的參數、局部變量
堆區(qū)(heap)一般由程序員分配釋放, 若程序員不釋放,程序可能不定時回收
全局區(qū)(靜態(tài)區(qū))(static)全局變量和靜態(tài)變量的存儲是放在一塊的,程序結束后系統釋放
文字常量區(qū)常量字符串就是放在這里的。程序結束后由系統釋放
程序代碼區(qū)存放函數體的二進制代碼

using System; public class StaticTest {static int count;int number;public StaticTest(){count = count + 1;number = count;}public void display(){Console.WriteLine("object={0}:count={1}", number, count); } } class MainTest {public static void Main(){StaticTest a = new StaticTest();a.display();} }

?不要認為[number是值類型,就存儲在棧區(qū)]?引用類型的值指向堆區(qū), 引用本身的值通常是32位或64位整形?局部變量的值存儲在棧區(qū)

1. 靜態(tài)成員:線程非安全

類的靜態(tài)成員即類變量,位于全局區(qū)(靜態(tài)區(qū)),為所有對象共享,一旦靜態(tài)變量被修改,其他對象對修改均可見,故線程非安全。

2.實例成員:單例模式(只有一個對象實例存在)線程非安全,非單例線程安全

類的實例成員(非靜態(tài)成員)為實例所有,在堆中分配,若在系統中只存在一個此類實例,在多線程環(huán)境下,“猶如”靜態(tài)變量那樣,被某個線程修改后,其他線程對修改均可見,故線程非安全;

如果每個線程執(zhí)行都是使用不同對象,那實例成員的修改將互不影響,故線程安全。

3. 局部變量:線程安全

每個線程執(zhí)行時將會把局部變量放在各自棧幀的工作內存中,線程間不共享,故不存在線程安全問題。

#面試八股文#??.Net線程同步技術解讀

https://stackoverflow.com/questions/2565331/fields-of-class-are-they-stored-in-the-stack-or-heap

--------

總結

以上是生活随笔為你收集整理的你管这叫线程安全?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。