【文章內(nèi)容簡介】
int_lock amp。 preempt disable ?單 CPU的同步手段 ?效率高,不影響吞吐量 ?影響實時性 內(nèi)部公開▲ 第 11頁 本文中的所有信息歸中興通訊股份有限公司所有,未經(jīng)允許,不得外傳 spin_lock ?多 CPU的同步手段 Spin_lock: preempt Disable。 LOCK{ for(。lock。)。 lock++。 } ?在單 CPU下退化為空指令 : ?在搶占內(nèi)核下,退化為禁止搶占指令 ?在非搶占內(nèi)核下,完全退化為空操作 ?若內(nèi)核配置上 Spin_lock debug,則不論是否配置成了 SMP,都會啟動 spin_lock 為什么需要禁止搶占 ? 內(nèi)部公開▲ 第 12頁 本文中的所有信息歸中興通訊股份有限公司所有,未經(jīng)允許,不得外傳 spin_lock ?同一 CPU上獲取兩次 spin_lock,必會導致死鎖。 ?現(xiàn)象:無異常打印但系統(tǒng)無反映 ?Spin_lock是忙等操作,影響吞吐量 ?使用: ?當在 SMP下的多個 CPU下需要同步數(shù)據(jù)訪問時 ?當訪問數(shù)據(jù)時間很短,低于線程切換時間 內(nèi)部公開▲ 第 13頁 本文中的所有信息歸中興通訊股份有限公司所有,未經(jīng)允許,不得外傳 ? spin_lock_init() ? Runtime initializing given spinlock_t ? spin_lock() / spin_unlock() ? Acquire or release given lock ? spin_lock_irq() / spin_unlock_irq() ? Disable local interrupts and acquire given lock ? Release given lock and enable local interrupts ? spin_lock_irqsave() / spin_unlock_irqrestore() ? Save current state of local interrupts, disable local interruptsand acquire given lock ? Release given lock and restore local interrupts to given previous state ? spin_trylock() ? Try to acquire given lock。 if unavailable, returns zero ? spin_islocked() : Return nonzero if the given lock is currently acquired spin_lock 內(nèi)部公開▲ 第 14頁 本文中的所有信息歸中興通訊股份有限公司所有,未經(jīng)允許,不得外傳 r/w spin lo