Mutexとイベントの違い

Anonim

Mutex vs Event

C#では、さまざまなスレッド同期オプションがあります。より広く使用されている2つはmutexとイベントです。ちょうどこれら2つの違いは何ですか?どちらが良い選択肢ですか?

イベントオプションは、イベントがブロードキャストされるまでスレッドをブロックするオプションを与えることができます。 「何かを寝かせ、何か重要なことが起きたときにのみ目を覚ますことと同じです。 mutexはシグナリングオプションまたは関数を持たないため、イベントはmutexと異なります。それを待つことのできる誰かが目覚めた後、イベントは信号をクリアすることができます。 APIでさえ、さまざまなイベントの1つまたはすべてが通知されるまで、オプションをブロックすることができます。さらに、イベントはカーネルオブジェクトです。ミューテックスに比べて "軽い"ものではありません。事象は、基本的に2つの状態を有するカーネルオブジェクトである。通常、イベントはイベントの到来を、場合によってはI / O操作の終了を通知します。

<! - 1 - >

「ミューテックス」は、相互排除を表します。これは、共有されるリソースのためのスコープ調整メカニズムの一形態です。それをトランザクションの一種と考えてください。あなたがブロックしているいくつかの共有リソース(他の人が既にそれにアクセスしているインスタンスでのみ)にアクセスしたい場合でも、待つ義務はありません。ミューテックスは、相互排除を有効にするために存在しますが、2つの状態で構成されています。これは、通常、共有リソースをリリースする部分にミューテックスが主張されている部分から更新されるコードを保護するためです。これは、他のスレッドがセクションを通過できないという事実につながります。

<! - 2 - >

ミューテックスの助けを借りてイベントをシミュレートしようとした人は、ロックが取得されるか、イベントが通知されるとすぐに、他の人を他の人にロックが解除されるまでこれは、通知されたイベントのセマンティクスではありません。ロックされていないイベントでは、イベントがポストされたままになり、すべてのスレッドテストでゲート形式が使用可能になります。プロセス間同期にコミットされたミューテックスは、カーネルモードのオブジェクトにあります。 1つのメソッドの下でマルチスレッド同期のために作成されたイベントは、ユーザーモードオブジェクトにあります。

<! - 3 - >

ミューテックスオブジェクトが重すぎて一般的すぎます。イベントオブジェクトは非常に軽いです。ユーザーモード同期は、ほとんどの場合、CPUサイクルが少なくなる理由から使用されます。ミューテックスは非常に重要なセクションに似ており、共有されているリソースへのアクセスを同期させるために使用されます。イベントは、タスクの同期や一部の人のタスクスケジューリングの管理に使用されるため、まったく異なる機能を備えています。

イベントは、いくつかの用語では

モニターに似ている、またはセマフォ/ミューテックスの伝統的な形式であるMutexとは異なり、条件変数のほうが多いです。要約:

1。イベントオプションは、イベントがブロードキャストされるまでスレッドをブロックするオプションを与えることができます。つまり、名前の「イベント」です。 "

2。事象は、基本的に2つの状態を有するカーネルオブジェクトである。通常、イベントはイベントの到来を、場合によってはI / O操作の終了を通知します。 3。 「ミューテックス」は、相互排除の略です。これは、共有されるリソースのためのスコープ調整メカニズムの一形態です。 4。プロセス間同期にコミットされたミューテックスは、カーネルモードのオブジェクトにあります。 1つのメソッドの下でマルチスレッド同期のために作成されたイベントは、ユーザーモードオブジェクトにあります。 5。イベントは、用語のいくつかで

モニターに似ている、またはセマフォ/ミューテックスの伝統的な形式であるMutexとは異なり、条件変数のほうが多くあります。