linux 用户态 spinlock,spinlock作用
Linux系統提供的內核同步機制有很多種。
spinlock只是一種選擇,并不是所有同步的地方都用spinlock.
通常它適用于對內核(包括模塊)的一些全局數據結構的訪問。
spinlock中所保護的codes最好能迅速完成,同時釋放該鎖。
在無法獲得該鎖的情況下,內核不會切換,而是不斷地嘗試, 這也是spinlock名字的由來,
也正因為此,所以spinlock中的代碼不能有schedule()之類的放棄CPU的代碼,也不會能被搶占,但可以有中斷(下面說明)。因為如果正好調度到另一個kernel path也需要這個鎖,整個系統將形成死鎖。
如果有中斷服務也會申請該spinlock,那么請用spinlock_irqsave()的API,把中斷關掉,不然還是會死鎖。
關于UP,SMP中的spinlock的區別,完全是實現問題,跟概念無關。
在UP系統中,如果內核不能被搶占,那么也就可以保證spinlock中的代碼不會搶占,保證了一致性(請不要深究“一致性”這個詞;-))。因此這里LINUX很輕松地實現了spinlock.
關于用戶態的spinlock,我沒有用過,但是概念上應該是
while(!getlock()) {}
如果是UP可搶占內核,則鎖定機制消失,spin_lock僅相當于禁止搶占
/usr/src/linux/include/linux/spinlock_api_up.h
總結
以上是生活随笔為你收集整理的linux 用户态 spinlock,spinlock作用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux启动数据库orl,linux5
- 下一篇: linux 配置sftp日志,在Cent