多執行緒 7 執行緒安全性,活躍性,效能問題

2022-06-28 17:12:08 字數 571 閱讀 4653

安全性:

資料競爭: 多個執行緒同時訪問乙個資料,並且至少有乙個執行緒會寫這個資料。

競態條件: 程式的執行結果依賴程式執行的順序。

也可以按照以下的方式理解競態條件: 程式的執行依賴於某個狀態變數,在判斷滿足條件的時候執行,但是在執行時其他變數同時修改了狀態變數。

if (狀態變數 滿足 執行條件)

活躍性:

死鎖:破壞造成死鎖的條件,1,使用等待-通知機制; 2主動釋放占有的資源;3,按順序獲取資源。

活鎖:雖然沒有發生阻塞,但仍會存在執行不下去的情況。感覺像進入了某種怪圈。解決辦法,等待隨機的時間。

飢餓:有些執行緒執行時間長導致其他執行緒等待很長時間,有些執行緒優先順序低導致一直不能得到執行。

效能:

核心就是在保證安全性和活躍性的前提下,根據實際情況,盡量降低鎖的粒度。即儘量減少持有鎖的時間。jdk的並發包裡,有很多特定場景針對併發效能的設計。還有很多無鎖化的設計,例如mvcc,tls,cow等,可以根據不同的場景選用不同的資料結構或設計。

執行緒安全性

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

執行緒安全性

執行緒安全性 當多個執行緒訪問某個類時,這個類始終都能表現出正確的行為,那麼稱這個類是執行緒安全的。執行緒不安全產生的問題 競態條件 由於不恰當的執行時序而出現不正確的結果。大多數競態條件的本質是基於一種可能失效的觀察結果來做出判斷或者執行某個計算。常見先檢查後執行,延遲初始化 單例模式 讀取 修改...

STL 執行緒安全性

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