2011-09-15 4 views
29

対私はthreadingモジュールでConditionEventクラス間の違いの明確な説明を見つけるためには至っていません。誰かが他の人よりも役に立ちそうな明確なユースケースはありますか?私が見つけることができるすべての例は、例としてプロデューサ - コンシューマモデルを使用しています。ここでは、queue.Queueがより簡単な解決策になります。threading.Condition threading.Event

答えて

35

単純に言えば、スレッドが何かが真になるのを待つことに興味があるときには、という条件を使用し、それが本当にある共有リソースに排他的にアクセスできるようにします。

スレッドは、何かが真になるのを待つことに興味があるときにイベントを使用します。

本質的に、Conditionは抽象化されたEvent + Lockですが、同じ基礎となるロックに対して複数の異なる条件を持つことができると考えると面白いです。したがって、基になるリソースの状態を記述する異なる条件を持つことができます。つまり、共有リソースの特定の状態にのみ関心を持つ作業者を覚醒させることができます。

+0

したがって、条件は抽象化されたイベント+ロックですか? –

+2

本質的にはい...しかし、あなたは、同じ基本的なロックを介していくつかの異なる条件を持つことができると考えると、より面白くなります。したがって、基になるリソースの状態を記述する異なる条件を持つことができます。つまり、共有リソースの特定の状態にのみ関心を持つ作業者を覚醒させることができます。 – donkopotamus

+0

'threading.Condition()。wait()'はブロック待機ですか? – overexchange

関連する問題