黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 hot資訊 什么是自旋鎖

什么是自旋鎖

更新時間:2022-09-14 09:45:40 來源:動力節點 瀏覽1633次

Linux 內核中最常見的鎖是自旋鎖。自旋鎖是一種最多可以由一個執行線程持有的鎖。如果執行線程在競爭(已持有)時嘗試獲取自旋鎖,則線程繁忙循環自旋等待鎖變得可用。如果鎖沒有被爭用,線程可以立即獲取鎖并繼續。旋轉可防止多個執行線程在任何時候進入臨界區。請注意,可以在多個位置使用同一個鎖,因此可以保護和同步對給定數據結構的所有訪問。

回到上一章的門和鑰匙類比,自旋鎖類似于坐在門外,等待里面的人出來遞給你鑰匙。如果你走到門口,里面沒有人,你可以拿鑰匙進入房間。如果您到達門口并且有人正在里面,您必須在外面等待鑰匙,有效地反復檢查它的存在。房間空了,你可以拿鑰匙進去。多虧了鑰匙(讀:自旋鎖),房間內(讀:臨界區)同時只允許一個人(讀:執行線程)進入。

競爭自旋鎖導致線程在等待鎖變為可用時自旋(實質上是浪費處理器時間)這一事實很重要。這種行為是自旋鎖的關鍵。它不是明智的做法是長時間持有自旋鎖。這就是自旋鎖的本質:一個輕量級的單持有人鎖,應該在短時間內持有。爭用鎖時的另一種行為是將當前線程置于睡眠狀態,并在它可用時將其喚醒。然后處理器可以關閉并執行其他代碼。這會產生一些開銷,最明顯的是切換出和切換回阻塞線程所需的兩個上下文切換,這肯定比用于實現自旋鎖的幾行代碼要多得多。因此,保持自旋鎖的時間少于兩次上下文切換的持續時間是明智的。因為我們大多數人都有比測量上下文切換更好的事情要做,所以盡量縮短鎖定時間。

自旋鎖依賴于體系結構并在匯編中實現。與架構相關的代碼在<asm/spinlock.h>中定義。實際可用的接口在<linux/spinlock.h>中定義。自旋鎖的基本用途是

spinlock_t mr_lock = SPIN_LOCK_UNLOCKED;
自旋鎖(&mr_lock);
/* 臨界區 */
自旋解鎖(&mr_lock);

鎖最多只能由一個執行線程同時持有。因此,一次只允許一個線程進入臨界區。這為多處理機器上的并發提供了所需的保護。在單處理器機器上,鎖編譯掉并且不存在。它們只是充當禁用和啟用內核搶占的標記。如果內核搶占關閉,鎖會完全編譯掉。

自旋鎖可用于中斷處理程序,而信號量不能使用,因為它們處于休眠狀態。如果在中斷處理程序中使用了鎖,您還必須在獲得鎖之前禁用本地中斷(當前處理器上的中斷請求)。否則,中斷處理程序可能會在持有鎖時中斷內核代碼并嘗試重新獲取鎖。中斷處理程序旋轉,等待鎖變得可用。然而,鎖持有者在中斷處理程序完成之前不會運行。這是上一章討論的雙重獲取死鎖的一個例子。請注意,您只需要在當前處理器。如果一個中斷發生在不同的處理器上,并且它在同一個鎖上旋轉,它不會阻止鎖持有者(它在不同的處理器上)最終釋放鎖。

內核提供了一個方便地禁用中斷和獲取鎖的接口。用法是

spinlock_t mr_lock = SPIN_LOCK_UNLOCKED;
無符號長標志;
spin_lock_irqsave(&mr_lock, flags);
/* 臨界區 ... */
spin_unlock_irqrestore(&mr_lock, flags);

例程spin_lock_irqsave()保存中斷的當前狀態,在本地禁用它們,然后獲得給定的鎖。相反,spin_unlock_irqrestore()解鎖給定的鎖并將中斷返回到它們之前的狀態。這樣,如果中斷最初被禁用,您的代碼不會錯誤地啟用它們,而是保持禁用它們。請注意,flags變量似乎是按值傳遞的。這是因為鎖定例程部分實現為宏。

在單處理器系統上,前面的示例仍然必須禁用中斷以防止中斷處理程序訪問共享數據,但鎖定機制已被編譯掉。鎖定和解鎖也分別禁用和啟用內核搶占。如果大家想了解更多相關知識,不妨來關注一下動力節點的Linux教程,里面還有更豐富的知識等著大家去學習,相信對大家一定會有所幫助的。

提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 人人人人凹人人爽人人澡 | 黄色一级a毛片 | 欧美色图日韩 | 日韩欧美精品综合一区二区三区 | 欧美久久一区二区三区 | 天天操天天干天搞天天射 | 色综合欧美 | 天天干天天舔天天操 | 你懂的 在线视频 | 免费国产成人高清在线观看不卡 | 狠狠干天天干 | 日韩福利社| 在线免费观看污视频 | 男女真实有遮挡xx00动态图 | 亚洲最大激情中文字幕 | 日本激情在线看免费观看视频 | 天天操天天摸天天爽 | 亚洲一区影音先锋色资源 | 日韩在线观看视频黄 | 视频在线你懂的 | 伊人激情 | 中文字幕一区二区区免 | 亚洲最大成人 | 一级爱爱片一级毛片-一毛 一级α一级α片免费观看网站 | 成在线人永久免费播放视频 | 久热久草| 在线观看免费黄视频 | 久久99中文字幕伊人 | 午夜影放免费观看 | 亚洲免费高清 | 国产精品久久久久久久人热 | 狠狠色噜噜狠狠狠合久 | 免费看黄在线网站 | 老头边吃奶边做边爱 | 日韩成人综合网 | 欧美福利网站 | 看片网站免费 | 精品福利影院 | 中文字幕在线观看2019 | 天堂在线最新资源 | 国产欧美日韩精品a在线观看高清 |