執行緒安全性

2021-10-05 20:38:28 字數 624 閱讀 5546

執行緒安全性:當多個執行緒訪問某個類時,這個類始終都能表現出正確的行為,那麼稱這個類是執行緒安全的。

執行緒不安全產生的問題

競態條件:由於不恰當的執行時序而出現不正確的結果。

大多數競態條件的本質是基於一種可能失效的觀察結果來做出判斷或者執行某個計算。

常見先檢查後執行,延遲初始化(單例模式)

讀取 - 修改 - 寫入(遞增運算)

如果當多個執行緒訪問同乙個可變的狀態變數時沒有使用合適的同步,那麼程式就會出錯。有三種方式可以修復這個問題:

在訪問變數時使用同步將狀態變數修改為不可變的變數

synchronized,可重入

volatile

顯示鎖原子變數

鎖可以保證原子性和可見性,volatile只能保證可見性

要保持狀態的一致性,就需要在單個原子操作中更新所有的相關的狀態變數。

鎖的**盡可能短。

當執行時間較長的計算或者可能無法快速完成的操作時(例如,網路i/o或控制台i/o),一定不要持有鎖。

執行緒安全性

定義 當多個執行緒訪問某個類時,不管執行環境採用何種呼叫方式或者這些執行緒如何交替執行,並且在主調 中不需要任何額外的同步或者協同,這個類都能表現出正確的行為,那麼就稱這個類是執行緒安全的。主要表現三個方面 atomic cas unsafe.compareandswapint atomiclong...

STL 執行緒安全性

stl 執行緒安全性 摘錄 在所有的主流stl實現方案中,幾乎所有的容器都是執行緒安全的 1 乙個執行緒讀寫乙個例項時,另乙個執行緒可以讀寫另乙個例項。2 多個執行緒可以在同時讀同乙個container。3 多個執行緒讀寫同乙個container時,你應該負責安排互斥性操作。乙個特例是std str...

2執行緒安全性

當多個執行緒訪問可變的同乙個狀態變數沒有正確的同步,那麼就會出現錯誤,有三種方式可以修復這種錯誤 將狀態變數修改為不可變的變數 在訪問狀態變數時使用同步 編寫併發應用程式的時候,一種準確地程式設計方式是 首先使 正確執行,然後在提高 的速度。即便如此,最好也只是當測試結果和應用需求告訴你必須提高效能...