54

モジュール内のConditionEventクラスの違いについての明確な説明はまだ見つかりません。threading一方が他方よりも役立つという明確なユースケースはありますか?私が見つけることができるすべての例は、例として生産者/消費者モデルを使用しています。ここqueue.Queueで、より簡単な解決策になります。

4

2 に答える 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 に答える