spin lock による排他制御

使い分けと詳細なドキュメントは Documentation/locking/spinlocks.txt, Documentation/DocBook/kernel-locking/index.html にあります。

spin lock の種類

種類lockunlock
spin_lock_irqsave()spin_unlock_irqrestore()
spin_lock_irq()spin_unlock_irq()
spin_lock()spin_unlock()
spin_lock_bh()spin_unlock_bh()

どのコンテキストでも使える spin_lock_irqsave() と spin_unlock_irqrestore()

数多く有る spin lock のうちどのコンテキストでも使える spin_lock_irqsave(), spin_unlock_irqrestore() を主に使っています。spin_lock_irqsave() spin_unlock_irqrestore() は状況によってはしなくても良い割り込み許可フラグの保存・復帰を無条件にします。無駄な処理かもしれません。それでも、実行時間の無駄よりは、spin_lock_irqsave(), spin_unlock_irqrestore() を呼び出した元のコンテキストが何か留意しながらコードを書くより安全な方法を選んでいます。

spin_lock_irqsave()

spin_lock_irqsave() を呼び出し、関数から戻ってくると次の様な状態になっています。

spin_unlock_restore()

spin_unlock_irqrestore() を呼び出し、関数から戻ってくると次の様な状態になっています。

spin_lock_irqsave() と spin_unlock_irqrestore() の注意点

spin_lock_irqsave(), spin_unlock_irqrestore() の注意点を列挙します。


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS