【スピンロック】
スピンロック とは?
公開:
💡 鍵が空くまで、その場で確かめながら待つ
ロックが空くまで繰り返し状態を確かめながら待つ、排他制御の方式。短い待ち時間に向く場合があるが、待機中もCPU資源を使う。
📌 このページのポイント
ロックを待つ方法に違いがあるの?
眠って待つほうがよさそうだけど?
待ち時間がごく短ければ、眠らせたり起こしたりする手間のほうが大きい場合があるよ。別のCPUで実行中の持ち主がすぐ鍵を返すなら、少し回って待つほうが都合がよいこともあるんだ。いつでも速いわけではないよ。
使うときの注意は?
書き換えるときだけ鍵をかければいい?
同時に読む側の保護も必要だよ。ほかの同期方式で安全を確保している場合を除き、同じ共有データに触る処理は同じルールを守るんだ。また、変数を眺めるだけでは排他にならず、取得の原子性とメモリ順序を備えたロックを使う必要があるね。
もっと詳しく知りたい人へ
Linuxのspinlock_tは必ず回り続けて待ちますか?
構成によります。PREEMPT_RTではspinlock_tの意味が変わり、RT-mutexを基にした待機が使われます。raw_spinlock_tは厳密なスピンロックです。一般的な概念と、特定のカーネルAPIの動作を区別します。
まとめ:ざっくりこれだけ覚えればOK!
「スピンロック」って出てきたら「眠らずに取得を試しながら待つロック」と思えればだいたいOK!