モジュール内のCondition
とEvent
クラスの違いについての明確な説明はまだ見つかりません。threading
一方が他方よりも役立つという明確なユースケースはありますか?私が見つけることができるすべての例は、例として生産者/消費者モデルを使用しています。ここqueue.Queue
で、より簡単な解決策になります。
14678 次
2 に答える
79
簡単に言うと、スレッドが何かが真になるのを待ち、真になると、共有リソースへの排他的アクセス権を持つことに関心がある場合は、条件を使用します。
一方、スレッドが何かが真になるのを待つことに関心がある場合は、イベントを使用します。
本質的に、Conditionは抽象化されたEvent + Lockですが、同じ基になるロックに対して複数の異なるConditionを持つことができると考えると、さらに興味深いものになります。したがって、基礎となるリソースの状態を説明するさまざまな条件を持つことができます。つまり、共有リソースの特定の状態にのみ関心があるワーカーをウェイクアップできます。
于 2011-09-15T01:11:39.463 に答える
10
もう1つの微妙な違いは、Event
'sはのset()
将来の呼び出しに影響を与えるwait()
(つまり、の後続の呼び出しはwait()
返され、が呼び出されるTrue
までclear()
ブロックされない)のに対し、Condition
' s notify()
(またはnotify_all()
)は影響を与えない(後続のの呼び出しはのwait()
次の呼び出しまでブロックされるnotify()
)ことです。 。
于 2018-09-30T13:41:24.287 に答える