Mutexとsemaphoreの違い

Anonim

ミューテックスとセマフォ

ミューテックスは、部屋への単一のキーに似ています。スレッドに似ているキーを持つ人は、アクセスできる唯一の人です。スレッドに似ているキーを保持している人は、その部屋にアクセスできる唯一の人です。そのアクセス権を持つ人は、その次の人物に鍵を渡さなければなりません。したがって、ミューテックスはそれを取得するスレッドによってのみ解放されます。

<! - 1 - >

ミューテックスは通常、一度に複数のスレッドで実行できないコードの一種であるリエントラントコードのセクションへのアクセスをシリアライズするために使用されます。 1つのスレッドだけがセクションに入ることができます。これにより、キュー内の他のスレッドは強制的に待機します。スレッドがアクセス権を得る前に、スレッドがセクションをあきらめるまで待たなければなりません。同じようなロックを持つ同じ数の部屋にアクセスできる同様のキーの数は、ミューテックスで同じアナロジーを使用します。セマフォまたはセマフォカウントの値は、部屋に出入りする人(スレッド)の数によって異なります。 5つの部屋があり、すべてが占有されている場合、セマフォカウントはゼロです。 2人が部屋を出ると、カウントは2になり、2つのキーはキューの次の2つに与えられます。

<!セマフォは、任意のスレッドまたはプロセスによって同時にシグナリングされ、同期を必要とするアプリケーションに最適です。それにもかかわらず、セマフォは、最大セマフォ数に基づいて共通リソースの同時ユーザ数を効果的に制限するために使用されます。

基本的に、mutexは1の値を持つセマフォと見なすことができます。

セマフォの減少と増分は、スレッドが共通リソースへのアクセスを要求しているのか、セクションを離れるのかによって異なります。

<!理論上は、ミューテックスと(バイナリ)セマフォは意味的に類似している。ミューテックスの実装はセマフォを使って行うことができ、逆も同様です。しかし、実際的な意味では、それらは少し異なる場合があります。ミューテックスは、相互排除のみに適用することを意図しており、バイナリセマフォは相互排除およびイベント通知に使用することを意図しています。それらは実装と一般的なセマンティクスに関して非常に似ていますが、それらは異なって使用されます。要約:

1。ミューテックスは、通常、セマフォが多数の同時アクセスである間に、共通リソースへのアクセスをシリアライズするために使用されます。 2。ミューテックスは1のカウントを持つセマフォのようなものです。 3。ミューテックスは、単一のスレッドがアクセスできるだけであり、セマフォーは任意のスレッドまたはプロセスによって同時にシグナリングされることができます。 4。セマフォは同期には理想的であり、イベント通知や相互排除に頻繁に使用され、mutexは相互排除のためにのみ使用されます。