1

Linux で、100 スレッドのコードがあるとします。これらのスレッドのうち 5 つが、ミューテックスによって保護された共有リソースをめぐって競合します。クリティカル セクションが実際に実行されている場合、ロックを取得しようとすると実行が停止されるのは 5 つのスレッドのみであり、他の 95 のスレッドは問題なく実行されます。

私の質問は、他の95個のスレッドの実行が一時停止または影響を受けるポイントがあるかどうかです。つまり、ミューテックス/カーネル/その他が、どのスレッドがミューテックスでブロックされているか、どのスレッドがロックを取得する必要があるか、どのスレッドがロックを取得する必要があるかを判断している場合です。ロックなどを求めていないため、実行できます

4

1 に答える 1

6

いいえ、他のスレッドは影響を受けません。

カーネルは、ロックの影響を受けるスレッドを確認しません各スレッド、ロックを取得しようとするときにカーネルに通知します。

スレッドがそれを行うと、スレッドはスリープ状態になり、ロックに関連付けられた特別なウェイクアップ キューに入ります。

ロックを使用しないスレッドは、使用するスレッドと同じキューに入らないため、ブロック動作は無関係です。

于 2013-03-29T14:03:10.613 に答える