0

ミューテックスのカーネル実装では、スレッド所有者フィールドは、SMP ビルドの場合にのみ存在します。適切でクリーンなコードの下では、取得が成功した場合にのみスレッドがリリースを呼び出すため、スレッドを追跡しないことでキャッシュと CPU サイクルを節約できることが理解できます。しかし、なぜ SMP はそれを必要とするのでしょうか? SMP では、スレッド所有者が別の CPU を使用しているときにミューテックスがハイブリッドでスピンし、参照用にこのフィールドが必要なためですか、それともその背後にさらに理由がありますか?

4

1 に答える 1

1

正直なところ、Linux カーネルのミューテックスの実装を今は覚えていませんが、ミューテックスの所有者をデータ構造に直接格納する理由が少なくとも 3 つあります。

  1. デバッグ用。カーネル クラッシュ ダンプから所有者を簡単に検出できます
  2. ランタイム アサーション用。既に取得したミューテックスを取得しようとする試みを検出するのは非常に簡単になります。
  3. 優先度継承プロトコルまたは優先度逆転の問題を解決するその他のメカニズムの実装については、http: //en.wikipedia.org/wiki/Priority_inversionを参照してください。
于 2012-09-24T19:46:14.763 に答える