水貨笨叔介紹MCS鎖
前幾天小明同學和笨叔抱怨:現在的spinlock鎖的程式碼變得越來越複雜了,我都看不懂了。的確spinlock的程式碼從原來簡單的幾行程式碼,變成現在複雜的幾百行,除了程式碼變得複雜,裡面隱含的原理也不簡單。
在linux核心的spinlock的實現歷史中,一共有三個版本的spinlock實現。
第一個是經典的spinlock實現。
第二個是Ticket spinlock的實現。
第三個是基於MCS演算法的queued spinlock的實現。
第一個最簡單,在ARM64上實現就是幾行彙編程式碼就搞定了。
第二種實現也不難,幾十行彙編也搞定了。
第三種實現,反而從彙編程式碼變成了C程式碼,程式碼量也變多了。
前面兩種鎖機制,究竟遇到了些啥問題。經典spinlock會導致不公平的問題,經典的spinlock就是一群CPU去搶一個鎖,那有可能出現,最早來搶的人 反而沒有搶到,而剛剛釋放鎖的CPU,後面加入搶的,反而容易搶到。大家有沒有發現一個現象: 比如在上海坐地鐵,你一直站在一個座位旁邊等座位,本來就你一個人在這個座位旁邊虎視眈眈。過了幾個站之後,你發現這個座位旁邊又多了幾個人虎視眈眈,當這個坐著的人要下車了,然後呢,你沒有搶到座位,你是不是很氣憤,麻蛋,我都站了好幾站了,居然被新上車的年輕小夥搶到位置,你說氣不氣!
所以,經典spinlock就是這個問題。後來,我們就出現了ticket spinlock,類似我們到外面吃飯,叫號,相對公平,先來先到,解決了公平問題。當然啦,地鐵裡,搶位置,沒有這種福利。
要理解MCS鎖,可能先要理解經典spinlock鎖帶來的cache顛簸問題,有興趣的同學可以看看水貨笨叔的視訊講解。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70005277/viewspace-2872539/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 里程焦慮的慢速通道:水貨笨叔講解QSpinLock原始碼:原始碼
- mysql鎖之三種行級鎖介紹MySql
- MySQL樂觀鎖和悲觀鎖介紹MySql
- 常用鎖原理的介紹(上)
- MySQL資料庫鎖介紹MySql資料庫
- 【乾貨乾貨】configtxlator 工具介紹
- Java中15種鎖的介紹Java
- java原始碼-ReentrantReadWriteLock寫鎖介紹Java原始碼
- Java 種15種鎖的介紹:公平鎖,可重入鎖,獨享鎖,互斥鎖等等Java
- Java 種15種鎖的介紹:公平鎖,可重入鎖,獨享鎖,互斥鎖等等...Java
- 水銀價格貨源水銀現貨
- 綠化環保環衛多功能灑水車介紹
- Java 中15種鎖的介紹:公平鎖,可重入鎖,獨享鎖,互斥鎖,樂觀鎖,分段鎖,自旋鎖等等Java
- MySQL內部實現讀鎖和寫鎖的具體鎖定型別介紹MySql型別
- 資料庫系列:MySQL InnoDB鎖機制介紹資料庫MySql
- 簡單介紹redis加鎖常用幾種方式Redis
- 叔
- 金屬水銀現貨價格水銀市場貨源
- 簡單介紹MySQL列印死鎖日誌的方法MySql
- Redis應用(二) --分散式鎖以及壓測介紹Redis分散式
- 危險!水很深,讓叔來 —— 談談命令查詢權責分離模式(CQRS)模式
- 【Java面試】為什麼引入偏向鎖、輕量級鎖,介紹下升級流程Java面試
- 乾貨|Spring Cloud Bus 訊息匯流排介紹SpringCloud
- MySQL中InnoDB鎖機制介紹及一些測試MySql
- 三星S9 S9+ 網路鎖介紹
- win10怎麼鎖屏介面 win10待機鎖屏設定方法介紹Win10
- mac鎖屏快捷鍵是什麼 mac系統快速鎖定螢幕快捷鍵介紹Mac
- AQS學習(一)自旋鎖原理介紹(為什麼AQS底層使用自旋鎖佇列?)AQS佇列
- 介紹
- 分散式鎖簡單入門以及三種實現方式介紹分散式
- 鎦金水銀汞出廠現貨水銀水銀價格
- 現貨水銀水銀銷售價格汞零售
- 水銀零售汞價格水銀現貨供應
- win10鎖屏時間怎麼設定 win10鎖屏時間修改方法介紹Win10
- 無水乾貨:InnoDB底層原理
- PostSync介紹
- FontFamily介紹
- Dubbo介紹