\r\n\r\n
セマフォとモニタの比較
セマフォは、並列プログラミング環境において、複数のプロセスが共通の資源や重要な部分に同時にアクセスしないようにするために用いられるデータ構造である。セマフォはデッドロックやコンテンションを回避するために使われ、モニターはプログラミング言語の構成要素で、複数のプロセスが同時に共通のリソースにアクセスすることを回避するためにも使われ、相互排除を保証している。モニターは、このために条件変数を使用します。
セマフォとは何ですか?
セマフォは、クリティカルセクションの相互排他を実現するためのデータ構造である。セマフォは主にwait(歴史的にPと呼ばれる)とsignal(歴史的にVと呼ばれる)の2つの操作をサポートしています。wait操作はセマフォがオープンされるまでプロセスをブロックし、signal操作は他のプロセス(スレッド)の侵入を許します。各セマフォは待機中のプロセスのキューと関連付けられています。スレッドからwaitオペレーションが呼び出されたとき、セマフォがオープンであればスレッドは続行できる。スレッドからwaitオペレーションが呼ばれたときにセマフォが閉じていると、そのスレッドはブロックされ、キューで待つ必要がある。 signalオペレーションはセマフォを開き、キューで待っているスレッドが既にある場合は処理を続行し、キューで待っているスレッドがない場合は次のスレッドのためのシグナルを記憶する。セマフォには、相互排他的セマフォと計数的セマフォと呼ばれる2つの種類があります。相互排他セマフォは資源に1回だけアクセスでき、計数セマフォは複数のスレッドが(利用可能なユニットが複数ある)資源にアクセスできる。
モニターとは?
モニターとは、共有データへのアクセスを制御するために使用されるプログラミング言語の構成要素である。モニターは、共有データ構造、(共有データ構造を操作する)プロシージャ、および同時実行プロシージャ呼び出し間の同期をカプセル化します。モニターは、そのデータが構造化されていないアクセスにさらされないこと、およびトレッド(その手順を通じてモニターのデータにアクセスする)が合法的な方法で相互作用することを保証する。モニタは、任意のタイミングで任意のモニタ手続きを実行できるスレッドを1つだけ許可することで、相互排他を保証している。他のスレッドがモニター内のメソッドを呼び出そうとしたときに、あるスレッドがすでにモニター内の手続きを実行している場合、2番目の手続きはブロックされ、キューで待機しなければなりません。モニターには、ホールモニターとテーブルトップモニターと呼ばれる2種類があります。両者は主にスケジューリングのセマンティクスが異なる。
セマフォとモニターの違いは何ですか?