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

Anonim

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

セマフォは、複数のプロセスが共通のリソースにアクセスしないようにするために使用されるデータ構造ですリソースまたはクリティカルセクションを並列プログラミング環境で同時に使用できます。セマフォは、デッドロックや競合状態を回避するために使用されます。ミューテックス(Mutual Exclusion Object)は、いくつかの並行プロセスによって同時に共通リソースへのアクセスを回避するためにも使用されます。

セマフォ とは何ですか?

セマフォは、クリティカルセクションに相互排除を提供するために使用されるデータ構造です。セマフォは、主に待機(歴史的にPと呼ばれる)と信号(歴史的にVと呼ばれる)の2つの操作をサポートします。 waitオペレーションは、セマフォが開かれ、signalオペレーションが別のプロセス(スレッド)に入るまでプロセスをブロックします。各セマフォは、待機中のプロセスのキューに関連付けられています。待機操作がスレッドによって呼び出されたときに、セマフォが開いていれば、スレッドは続行できます。 waitオペレーションがスレッドによって呼び出されたときにセマフォが閉じられると、スレッドはブロックされ、キュー内で待機しなければなりません。シグナル操作はセマフォをオープンし、すでにキュー内で待機しているスレッドがある場合はそのプロセスを進めることができ、キュー内で待機中のスレッドがない場合は、次のスレッドに対して信号が記憶されます。ミューテックスセマフォとカウントセマフォと呼ばれるセマフォには、2種類あります。ミューテックスセマフォは、リソースへの単一のアクセスを許可し、セマフォのカウントは、複数のスレッドがリソース(複数のユニットが利用可能)にアクセスできるようにします。

ミューテックスとは何ですか?

コンピュータアプリケーションが起動すると、ミューテックスが作成され、リソースにアタッチされます。リソースがスレッドによって使用されると、リソースはロックされ、他のスレッドはリソースを使用できません。別のスレッドが同じリソースを使用したい場合は、要求を行う必要があります。そのスレッドは、最初のスレッドがリソースで終了するまでキューに入れられます。最初のスレッドがリソースで終了すると、ロックが解除され、キュー内で待機しているスレッドはそのリソースにアクセスできます。キュー内で待機している複数のスレッドがある場合、スレッドは回転的にアクセスされます。実際には、ミューテックスが複数のスレッド間でリソースへのアクセスを交替するとき、複数のスレッドが同時にリソースを消費しているため、ミューテックスはリソースへのアクセスを複数のスレッドに交互に切り替えると表示されます。しかし、内部的には、1つのスレッドだけが所定の時間にリソースにアクセスしています。

SemaphoreとMutexの違いは何ですか?

セマフォとミューテックスの両方のオブジェクトは、並列プログラミング環境で相互排除を達成するために使用されますが、いくつかの違いがあります。ミューテックスオブジェクトは、リソースまたはクリティカルセクションを消費するスレッドを1つだけ許可しますが、セマフォはリソースへの同時アクセスを制限された数(最大許容数)で許可します。mutexオブジェクトでは、リソースにアクセスしたい他のスレッドは、現在のスレッドがリソースの使用を終了するまで、キュー内で待機する必要があります。