使用鎖的幾個重要理念

2021-06-20 11:16:30 字數 663 閱讀 7610

寫過些核心**後,再次閱讀ldd感覺理解就好多了。簡單總結了幾個使用鎖的重要理念。

一、鎖的設計和使用策略。

1、當我們建立了乙個可被並行訪問的物件時,應該同時定義用來控制訪問的鎖。鎖定模式必須在一開始就安排好,否則其後的改進將會非常困難。先期的時間投入會在除錯階段收益。

2、幾個函式均需要訪問某個受特定鎖保護的資料結構時,某給獲得鎖的函式絕對不能再次呼叫同樣試圖獲得這個鎖的函式,否則就會導致死鎖。

3、設計函式時,通常提供給外部呼叫的函式必須顯式地處理鎖定;而在編寫內部函式時則假定呼叫者已經獲取了相關的鎖。在編寫存在這種假定的內部函式時,最好顯式地說明這種假定。

二、鎖的順序規則。

1、在使用大量鎖的系統中,**通常需要一次擁有多個鎖。在這種情況下,應該始終以相同的順序或,以避免可能的死鎖。

2、有幫助的兩個規則。如果我們必須獲得乙個區域性鎖,以及乙個屬於核心更中心位置的鎖,則應該首先獲取自己的區域性鎖。如果我們擁有訊號量和自旋鎖的組合,則必須首先獲得訊號量。

三、粗粒度鎖和細粒度鎖的對比。

就粗粒度鎖和細粒度鎖來說,通常的規則是:我們應該盡量使用粗粒度鎖,除非有真正的原因相信競爭會導致問題。我們需要抑制過早的考慮優化的慾望,因為真正的效能約束通常出現在非預期的情況下。

UCOS II幾個重要的函式使用詳解

void osinit void ospriocur 0 存放應用任務的優先順序 ospriohighrdy 0 ostcbhighrdy os tcb 0 tcb initialization ostcbcur os tcb 0 ostcblist os tcb 0 for i 0 i os lo...

幾個重要的概念

1 服務 服務是乙個個的介面,介面約定了服務,從而使隨意替換服務的實現對使用介面服務的 沒有任何的影響。像我們上面例子中的ilog,ilogformatter都是乙個個服務,我們在這個例子中支實現了乙個文字檔案的日誌記錄,如果你要是實現資料庫記錄的日誌記錄,都必須要遵守ilog這個介面。2 元件 簡...

HTTP Servlet 重要的幾個方法

http servlet繼承了gencenservlet類 gencenservlet實現了兩個介面 乙個用於servletconfig設定介面,乙個為servlet介面只要是 1 init 方法 控制servlet的生命週期 重點記憶8個方法 http servlet 使用乙個 html 來傳送和...