執行緒安全 1

2021-09-23 10:21:06 字數 413 閱讀 4172

執行緒安全並不是執行緒的安全,而是指記憶體的安全。

程序在作業系統執行行,會得到作業系統分配的記憶體空間,而每個程序只能在自己的記憶體空間中執行,而不能去訪問其他的程序。而在程序的記憶體空間中會有一塊公共的空間,稱為堆記憶體。而這一塊空間是公共的,也就意味著程序的每個執行緒都可以去訪問這塊公共空間,這也就說到了執行緒安全。由於是堆記憶體為公共區域,當有個執行緒在堆記憶體中存放資料後,會有其他的執行緒來堆記憶體中訪問,而且是在沒有任何限制情況下進行訪問,存在被意外修改資料的風險。

那麼,為了解決這一線程安全問題,作業系統會為每個執行緒分配屬於它自己的記憶體空間,即棧記憶體,這個棧記憶體,其他執行緒是無法進行訪問和修改資料的,這也就保護了執行緒的安全問題。

接下來,如果某個執行緒的某個資料只會被這個執行緒使用,其他執行緒不能操作也不需要操作,那麼這個資料就會被放入執行緒的棧記憶體中,被保護起來。稱之為,區域性變數。

多執行緒學習筆記(1)執行緒安全問題

什麼是執行緒安全問題?答 當多個執行緒共享同乙個全域性變數。在做寫操作的時候,可能會受到其他執行緒的干擾,導致資料有問題,這種現象叫做執行緒安全問題。多個執行緒共享同乙個區域性變數,在做寫操作的時候,不會發生執行緒安全問題 class trianthread1 implements runnable...

Struts 1 x的執行緒安全

回到首頁 先簡單的回顧,然後按需,第二輪,第三輪完善。執行緒安全是每個多執行緒程式都要考慮的問題,struts 1.x 也不理額外。如果處理不當就會出現問題,並且很難排查,設計階段必須要留意執行緒安全。軟體設計應該優於開發,做hw系統最大的痛苦就是倒置,因為都是政治任務,每個人都只關注自己的或者自己...

1 Golang執行緒安全(簡單例子)

var money int 0 func add pint int func addmoney time.sleep time.second 5 fmt.println money 預期結果是100000000,但是由於add方法是協程方式呼叫的,存在併發的情況,導致結果不符合預期。全域性變數 va...