(一)核心鎖的使用之自旋鎖
對於鎖的使用,使用過的人會覺得比較簡單,但是沒有使用過的人來講,可能對其瞭解就比較淺了,平時開發過程中使用鎖及鎖中斷的時候較多,也積累了一些簡單的經驗給大家分享一下:
首先我們先來討論一下自旋鎖,所謂自旋鎖,可以理解為就是原地打轉,直到獲取到對應的鎖才退出,核心中對應的介面是:spin_lock()和spin_unlock()
使用場景:多個任務有可能對共享資源同時訪問,這個時候需要進行互斥操作,可以使用本組介面來實現互斥,但是本人強烈不建議使用此介面進行互斥(核心也不建議),原因是如果一個任務正在訪問臨界資源,使用了本組介面,但是在spin_lock後,spin_unlock前來了中斷,恰巧中斷上下文中也會呼叫spin_lock來獲取這個鎖,這個時候就抓瞎了,中斷上下文將永遠獲取不到那個鎖了,因為中斷優先順序較高,在任務未釋放鎖之前進入到了中斷上下文中,中斷上下文中spin_lock將永遠不會返回,從而死鎖;所以建議使用spin_lock_irqsave和spin_unlock_irqrestore這一對介面,下方表格列出了兩對自旋鎖方法,當然核心中還有其他方法,但是不常用,就不在這裡說明了。
使用注意事項:鎖定時間一定要短,太長的話非常影響系統效能;還有就是自旋鎖是非遞迴的,也就是說在spin_lock_irqsave()之後不能再有spin_lock_irqsave的操作,實際開發中我也確實犯過這樣的低階錯誤。
自旋鎖方法
方法
描述
spin_lock()
獲取指定的自旋鎖
spin_unlock()
釋放指定的自旋鎖
spin_lock_irqsave()
獲取指定的自旋鎖,同時儲存本地中斷狀態,並禁止中斷
spin_unlock_irqrestore()
釋放指定的自旋鎖,同時恢復本地中斷狀態
相關文章
- Linux核心自旋鎖Linux
- 核心中各種同步機制(自旋鎖大核心鎖順序鎖等)
- Linux核心自旋鎖使用筆記Linux筆記
- 自旋鎖spinlock
- java 中的鎖 -- 偏向鎖、輕量級鎖、自旋鎖、重量級鎖Java
- C 語言的 互斥鎖、自旋鎖、原子操作
- 自旋鎖和互斥鎖區別 --- 經典
- 記一次 "排它鎖" 和 "自旋鎖" 的簡單實現
- AQS學習(一)自旋鎖原理介紹(為什麼AQS底層使用自旋鎖佇列?)AQS佇列
- LiteOS:SpinLock自旋鎖及LockDep死鎖檢測
- 淺談自旋鎖和 JVM 對鎖的最佳化JVM
- Java 中15種鎖的介紹:公平鎖,可重入鎖,獨享鎖,互斥鎖,樂觀鎖,分段鎖,自旋鎖等等Java
- MySQL 配置自旋鎖輪詢MySql
- 多執行緒的這些鎖知道嗎?手寫一個自旋鎖?執行緒
- 執行緒安全: 互斥鎖和自旋鎖(10種)執行緒
- 輕鬆搞懂Java中的自旋鎖Java
- 面試官:你說說互斥鎖、自旋鎖、讀寫鎖、悲觀鎖、樂觀鎖的應用場景面試
- 多執行緒中的鎖系統(四)-談談自旋鎖執行緒
- 自旋鎖、阻塞鎖、可重入鎖、悲觀鎖、樂觀鎖、讀寫鎖、偏向所、輕量級鎖、重量級鎖、鎖膨脹、物件鎖和類鎖物件
- 從自旋鎖、睡眠鎖、讀寫鎖到 Linux RCU 機制講解Linux
- Java多執行緒/併發10、不可重入鎖/自旋鎖、可重入鎖Java執行緒
- 同步篇——臨界區與自旋鎖
- 一文看懂臨界區、互斥鎖、同步鎖、臨界區、訊號量、自旋鎖等名詞!
- java中如何實現可重入的自旋鎖Java
- 一文讀懂原子操作、記憶體屏障、鎖(偏向鎖、輕量級鎖、重量級鎖、自旋鎖)、Disruptor、Go Context之上半部分記憶體GoContext
- 使用Rust為RISC-V OS 實現自旋鎖Rust
- Java併發程式設計——深入理解自旋鎖Java程式設計
- Synchronized 輕量級鎖會自旋?好像並不是這樣的。synchronized
- ObjC 多執行緒簡析(二)- os_unfair_lock的型別和自旋鎖與互斥鎖的比較OBJ執行緒AI型別
- 【問答分享第一彈】MySQL鎖總結:MySQL行鎖、表鎖、排他鎖、共享鎖的特點MySql
- MySQL鎖(讀鎖、共享鎖、寫鎖、S鎖、排它鎖、獨佔鎖、X鎖、表鎖、意向鎖、自增鎖、MDL鎖、RL鎖、GL鎖、NKL鎖、插入意向鎖、間隙鎖、頁鎖、悲觀鎖、樂觀鎖、隱式鎖、顯示鎖、全域性鎖、死鎖)MySql
- 達夢6.0試用之併發和鎖機制
- RAC 鎖管理與鎖問題的定位(一)
- MySQL/InnoDB中,樂觀鎖、悲觀鎖、共享鎖、排它鎖、行鎖、表鎖、死鎖概念的理解MySql
- Oracle的TX鎖(行級鎖、事務鎖)Oracle
- The art of multipropcessor programming 讀書筆記-3. 自旋鎖與爭用(2)筆記
- 一文搞懂MySQL行鎖、表鎖、間隙鎖詳解MySql
- 【Redis 分散式鎖】(1)一把簡單的“鎖”Redis分散式