2011-02-09 17 views

答えて

1

そうでない場合、デッドロックに対処する必要はありません。シナリオは、ブロックされたスレッドが別のスレッドが取得しようとする同期オブジェクトを取得したことです。ブロックされます。

さて、今質問があります。一般的には、はい。ブロッキング条件を解除するには、他のコードを実行する必要があります。明白でないケースは、スレッドがI/Oでブロックされている場合、ドライバでコードを実行するカーネルスレッドです。またはスレッドをスケジューラは、プロセッサが取得を待っているためにブロックされている場合や、無限のタイムアウトで待機している場合は、スレッドスケジューラ。

+0

言い訳:スレッドがあるときこのスレッドが同じプロセスまたはそのプロセス内の他のスレッドをブロックする必要があるかどうかは、毎回起こっていますか? – Dchris

+0

@user:質問を編集してこの説明を含めることはできますか? – Karmastan

+0

さて、更新されたポスト。 –

1

はい、これは、あるスレッドが別のスレッドが何かを行うのを待つ必要があるすべての同期操作で発生します。例えば、スレッドAがロックを保持していて、カーネル内で長いブロッキング操作を行った場合、別のスレッドBはロックを取得しようとするとブロックします。スレッドBは少なくともスレッドAのブロック操作が終了するまでブロックされます。極端な場合には

、お互いに待機しているスレッドはDeadlock

追加の明確化になります:互いに独立して、プロセスの実行中

スレッド。 1つのスレッドブロッキングが他のスレッドを必ずしもブロックする必要はありません。これは、スレッドが最初に使用される主な理由の1つです。

-1

それが起こるかpossibility.iがあるかどうかお尋ねしたい場合は、私が間違っexpression..iが意味するdidntのスレッドがブロックされている、それはブロックも、プロセス内のすべてのスレッドが

+0

いいえ、これは単に真実ではありません。デッドロックは、すでに投稿された回答に記載されている場合に発生します。あなたが*全く言うように自動的には起こらない*。 –

関連する問題