亚洲视频二区_亚洲欧洲日本天天堂在线观看_日韩一区二区在线观看_中文字幕不卡一区

公告:魔扣目錄網(wǎng)為廣大站長提供免費收錄網(wǎng)站服務,提交前請做好本站友鏈:【 網(wǎng)站目錄:http://www.430618.com 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

簡介自旋鎖

“鎖”的作用就是保護臨界區(qū)資源,避免不同的CPU同時訪問相同的變量(或中斷與進程同時訪問相同變量)。非原子變量的賦值,大多數(shù)都不是一個指令周期能完成的,試想如果CPU1將某變量剛更改了一半,CPU2正好就來讀取了這個半成品變量,并基于此去做計算,可能會造成嚴重后果。

解決辦法就是CPU1在改寫這個變量前,先“加鎖”;CPU2訪問這個變量前也先加鎖,但由于已經(jīng)被加鎖了,所以獲取鎖失敗,CPU2原地等待鎖釋放;CPU1改寫完變量后,“解鎖”;CPU2獲取到鎖后加鎖,然后訪問變量,完成后解鎖。

上面的“鎖”可以是信號量、互斥鎖、自旋鎖等。本文的自旋鎖(spinlock)與其它鎖的最大不同,就是在等待鎖釋放的時候不會睡眠,而是在空轉(zhuǎn)(自旋)。信號量和互斥鎖在等待鎖釋放的時候,會進入睡眠。

不睡眠的好處是:可以在中斷上下文運行;另外,對于很快就能獲取到鎖的場景,這種方式效率更高。

不睡眠的壞處是:如果等待鎖釋放的時間較長,則極其浪費CPU資源。

自旋鎖在X86的代碼實現(xiàn)

/******include/asm-i386/spinlock_types.h***/

typedef struct {
                unsigned int slock;
} raw_spinlock_t;
 #define __RAW_SPIN_LOCK_UNLOCKED { 1 }

/******include/asm-i386/spinlock.h***/

static inline void __raw_spin_lock(raw_spinlock_t *lock){
    asm volatile(
       // lock->slock減1
      1:LOCK_PREFIX decb %0
       //如果不為負.跳轉(zhuǎn)到3f.3f后面沒有任何指令,即為退出
      jns 3f
      //重復執(zhí)行nop.nop是x86的小延遲函數(shù)
      2:rep nop
      cmpb $0,%0
      //如果lock->slock不大于0,跳轉(zhuǎn)到標號2,即繼續(xù)重復執(zhí)行nop
      jle 2
      //如果lock->slock大于0,跳轉(zhuǎn)到標號1,重新判斷鎖的slock成員
      jmp 1
      3:: "+m" (lock->slock) : : "memory");
}

在多處理器環(huán)境中 LOCK_PREFIX 實際被定義為 “lock”前綴。x86 處理器使用“lock”前綴的方式提供了在指令執(zhí)行期間對總線加鎖的手段。芯片上有一條引線 LOCK,如果在一條匯編指令(ADD, ADC, AND, BTC, BTR, BTS, CMPXCHG, CMPXCH8B, DEC, INC, NEG, NOT, OR, SBB, SUB, XOR, XADD, XCHG)前加上“lock” 前綴,經(jīng)過匯編后的機器代碼就使得處理器執(zhí)行該指令時把引線 LOCK 的電位拉低,從而把總線鎖住,這樣其它處理器或使用DMA的外設(shè)暫時無法通過同一總線訪問內(nèi)存。

jns 匯編指令檢查 EFLAGS 寄存器的 SF(符號)位,如果為 0,說明 slock 原來的值為 1,則線程獲得鎖,然后跳到標簽 3 的位置結(jié)束本次函數(shù)調(diào)用。如果 SF 位為 1,說明 slock 原來的值為 0 或負數(shù),鎖已被占用。那么線程轉(zhuǎn)到標簽 2 處不斷測試 slock 與 0 的大小關(guān)系,假如 slock 小于或等于 0,跳轉(zhuǎn)到標簽 2 的位置繼續(xù)忙等待;假如 slock 大于 0,說明鎖已被釋放,則跳轉(zhuǎn)到標簽 1 的位置重新申請鎖。

分享到:
標簽:自旋
用戶無頭像

網(wǎng)友整理

注冊時間:

網(wǎng)站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨大挑戰(zhàn)2018-06-03

數(shù)獨一種數(shù)學游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數(shù)有氧達人2018-06-03

記錄運動步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定