《CLRViaC#第3版》筆記之(二十三)-執行緒鎖和執行緒安全的概念
執行緒中最繁瑣的應該要算執行緒同步的問題,在理解執行緒同步之前,首先需要了解執行緒同步中經常提及的2個概念。
即執行緒鎖和執行緒安全。
主要內容:
- 執行緒鎖
- 執行緒安全
1. 執行緒鎖
首先明確的是,執行緒鎖是迫不得已而使用的技術。也就是說,在多執行緒中應用中,應儘量構造不用使用執行緒鎖的方法。
執行緒鎖主要有以下3個問題:
- 容易出錯:使用執行緒鎖的程式碼稍不留神就會出錯,而且由於是多執行緒的環境,錯誤不一定會每次都出現,很難除錯。
- 損害效能:增加了獲取和釋放鎖的操作,顯然影響了效能。
- 阻塞執行緒:鎖的意義在於使得多個執行緒依次訪問某個資源,所以必然帶來執行緒的阻塞,甚至導致死鎖。
避免使用執行緒鎖有以下注意事項:
- 儘量避免使用一些共享資料(比如 static 變數)可以較少執行緒鎖。
- 對共享資料的只有只讀訪問的話也不用加鎖。
- 在方法的引數中儘量嘗試使用值型別,每個執行緒都會對值型別進行復制,線上程內部使用其副本,從而不用加鎖。
- 執行緒內部new出的物件只要不被其他執行緒使用,也不用加鎖。
當然,執行緒鎖雖然有這樣那樣的缺點,也不是完全禁止使用。只是每個使用的執行緒鎖的地方都要斟酌一下。
2. 執行緒安全
執行緒安全是指當2個或2個以上的執行緒同時訪問資料時,不會對這個資料造成破壞,造成資料前後不一致的情況。
微軟的FCL(Framework Class Library)保證其中的每個static方法都是執行緒的安全的,但是不保證例項方法是執行緒安全的。
我們在構造自己的Library時也可以參考這個原則。
使用執行緒鎖及執行緒同步的目的都是為了保證執行緒安全。
本文轉自wang_yb部落格園部落格,原文連結:http://www.cnblogs.com/wang_yb/archive/2012/06/12/2546226.html,如需轉載請自行聯絡原作者
相關文章
- 《CLR Via C# 第3版》筆記之(二十三) - 執行緒鎖和執行緒安全的概念C#筆記執行緒
- iOS多執行緒安全-13種執行緒鎖?iOS執行緒
- 多執行緒系列之 執行緒安全執行緒
- iOS 多執行緒之執行緒安全iOS執行緒
- iOS多執行緒之執行緒安全iOS執行緒
- 畫江湖之 PHP 多執行緒開發 【執行緒安全 互斥鎖】PHP執行緒
- 畫江湖之 PHP 多執行緒開發 [執行緒安全 互斥鎖]PHP執行緒
- iOS開發基礎——執行緒安全(執行緒鎖)iOS執行緒
- 執行緒安全和執行緒不安全理解執行緒
- 執行緒同步及執行緒鎖執行緒
- Java多執行緒中執行緒安全與鎖問題Java執行緒
- Java執行緒:執行緒的同步與鎖Java執行緒
- Java 執行緒安全 與 鎖Java執行緒
- Java多執行緒(2)執行緒鎖Java執行緒
- 多執行緒-執行緒控制之休眠執行緒執行緒
- 多執行緒-執行緒控制之加入執行緒執行緒
- 多執行緒-執行緒控制之禮讓執行緒執行緒
- 執行緒3--執行緒安全執行緒
- java執行緒之守護執行緒和使用者執行緒Java執行緒
- 執行緒安全: 互斥鎖和自旋鎖(10種)執行緒
- 什麼是執行緒安全和執行緒不安全執行緒
- 執行緒池之ThreadPoolExecutor執行緒池原始碼分析筆記執行緒thread原始碼筆記
- 執行緒池之ScheduledThreadPoolExecutor執行緒池原始碼分析筆記執行緒thread原始碼筆記
- 執行緒(一)——執行緒,執行緒池,Task概念+程式碼實踐執行緒
- 併發與多執行緒之執行緒安全篇執行緒
- JavaSE_多執行緒入門 執行緒安全 死鎖 狀態 通訊 執行緒池Java執行緒
- 多執行緒-執行緒控制之守護執行緒執行緒
- 執行緒和執行緒池執行緒
- 【Java多執行緒】執行緒安全的集合Java執行緒
- JAVA多執行緒詳解(3)執行緒同步和鎖Java執行緒
- python之執行緒鎖Python執行緒
- Java執行緒之鎖研究Java執行緒
- GCD 之執行緒死鎖GC執行緒
- 二十三:從庫的SQL 執行緒(MTS協調執行緒)和sql_slave_skip_counter引數(筆記)SQL執行緒筆記
- 執行緒和鎖,鎖升級執行緒
- JCIP閱讀筆記之執行緒安全性筆記執行緒
- 多執行緒筆記執行緒筆記
- 執行緒控制之休眠執行緒執行緒