バグ チェック 0xF: SPIN_LOCK_ALREADY_OWNED

SPIN_LOCK_ALREADY_OWNED バグ チェックの値は 0x0000000F です。 これは、スピン ロックがすでに所有されているときに、スピン ロックの要求が開始されたことを示します。

重要

この記事は、プログラマー向けです。 コンピューターを使用中に、ブルー スクリーン エラーが表示された場合は、「ブルー スクリーン エラーのトラブルシューティング」を参照してください。

SPIN_LOCK_ALREADY_OWNED パラメーター

なし

原因

通常、このエラーは、スピン ロックに対する再帰的な要求によって発生します。 また、スピン ロックに対する再帰要求に似たものが開始された場合にも発生する可能性があります。たとえば、あるスレッドによってスピン ロックが取得された後、同じスレッドがある関数を呼び出し、その関数もスピン ロックを取得しようとする場合などです。 この場合、スピン ロックを取得する 2 回目の試行は、ブロックすると回復不能なデッドロックが発生するため、ブロックされません。 複数のプロセッサで呼び出しが行われた場合、一方のプロセッサは、もう一方のプロセッサがロックを解除するまでブロックされます。

このエラーは、すべてのスレッドとすべてのスピン ロックに IRQL が割り当てられている場合にも、明示的な再帰なしに発生することがあります。 スピン ロック IRQL は常に DPC レベル以上ですが、これはスレッドには当てはまりません。 ただし、スピン ロックを保持しているスレッドは、スピン ロックの IRQL 以上の IRQL を維持する必要があります。 スレッドの IRQL を、保持しているスピン ロックの IRQL レベル以下にまで下げると、プロセッサで別のスレッドをスケジュールできるようになります。 この新しいスレッドは、同じスピン ロックの取得を試みる可能性があります。

解決方法

ロックを再帰的に取得していないことを確認してください。 また、スピン ロックを保持しているスレッドについては、スレッド IRQL を、保持しているスピン ロックの IRQL より低いレベルまで下げていないことを確認します。