モニターとセマフォの主な違いは何ですか?
モニターとセマフォの主な違いは何ですか?
回答:
A モニターは、複数のスレッドからアクセスされるように設計されたオブジェクトです。監視オブジェクトのメンバー関数またはメソッドは相互排除を強制するので、一度に1つのスレッドのみがオブジェクトに対してアクションを実行できます。1つのスレッドが現在オブジェクトのメンバー関数を実行している場合、そのオブジェクトのメンバー関数を呼び出そうとする他のスレッドは、最初のスレッドが終了するまで待機する必要があります。
A セマフォは、低レベルのオブジェクトです。セマフォを使用してモニターを実装することもできます。セマフォは本質的に単なるカウンタです。カウンタが正の場合、スレッドがセマフォを取得しようとすると、それが許可され、カウンタが減少します。スレッドが完了すると、セマフォが解放され、カウンタが増加します。
スレッドがセマフォを取得しようとしたときにカウンタがすでにゼロの場合、別のスレッドがセマフォを解放するまで待機する必要があります。スレッドがセマフォを解放するときに複数のスレッドが待機している場合、そのうちの1つがそれを取得します。セマフォを解放するスレッドは、それを獲得したスレッドと同じである必要はありません。
モニターは公衆トイレのようなものです。一度に入ることができるのは一人だけです。彼らはドアをロックして他の人が入ってくるのを防ぎ、自分の仕事をし、そして彼らが去るときにそれを解錠する。
セマフォは自転車のレンタル場所のようなものです。彼らは一定数の自転車を持っています。自転車を借りて無料で利用できる場合は、自転車に乗ることができます。それ以外の場合は、待つ必要があります。誰かが自分の自転車を返却すると、他の誰かがそれを取ることができます。自転車を持っている場合は、他の人に返却してもらうことができます---自転車を借りる場所は、自転車を返却する限り誰が返却してもかまいません。
以下の説明では、モニターのwait()およびsignal()がセマフォのPおよびVとどのように異なるかを実際に説明します。
モニター内の条件変数に対するwait()およびsignal()操作は、セマフォのカウントに関するPおよびV操作に似ています。
waitステートメントはプロセスの実行をブロックできますが、signalステートメントは別のプロセスのブロックを解除できます。ただし、いくつかの違いがありますそれらの間の。プロセスがP操作を実行するとき、カウントするセマフォがゼロより大きい可能性があるため、プロセスが必ずしもそのプロセスをブロックするわけではありません。対照的に、待機ステートメントが実行されると、常にプロセスがブロックされます。タスクがセマフォに対してV操作を実行すると、そのセマフォを待機しているタスクのブロックを解除するか、ロックを解除するタスクがない場合はセマフォカウンタをインクリメントします。一方、ブロック解除するプロセスが他にないときにプロセスがシグナルステートメントを実行しても、条件変数には影響がありません。セマフォとモニターのもう1つの違いは、V操作によって起こされたユーザーが遅延なく実行を再開できることです。逆に、信号操作で覚醒したユーザーは、モニターのロックが解除された場合にのみ再開されます。加えて、
java.util.ArrayList
と、それはオブジェクトですか、それとも複数のオブジェクトのコンテナですか?まあ、それは同時に両方です。セマフォはそれへのアクセスを制御するのに適切ですか?私は言うでしょう:いいえ。
セマフォを使用してクリティカル領域を保護する場合、セマフォと保護されるデータの間に直接の関係はありません。これは、セマフォがコードの周りに分散している理由の1つであり、待機または通知の呼び出しを忘れがちな理由の1 つです。であり、です。この場合、相互排除に違反したり、リソースを永続的にロックしたりする結果になります。
対照的に、これらの悪いことはモニターでは起こりえません。モニターはデータに直接疲れます(データをカプセル化します)。モニター操作はアトミックアクションであるため、エントリプロトコルを呼び出さずにデータにアクセスできるコードを作成することはできません。終了プロトコルは、監視操作が完了すると自動的に呼び出されます。
モニターには、続行する前に条件変数の形式で条件を同期するための組み込みメカニズムがあります。条件が満たされない場合、プロセスは条件の変更が通知されるまで待機する必要があります。プロセスが条件の同期を待機しているとき、モニターの実装は相互排除の問題を処理し、別のプロセスがモニターにアクセスできるようにします。
The Open University M362 Unit 3「Interacting process」コース資料から取得。
セマフォ:
カウンターまたはフラグを使用して並行システム内の一部の共有リソースへのアクセスを制御することは、セマフォの使用を意味します。
例:
フラグは、リソースの現在の状態のみを示し、リソース上の待機中または実行中のオブジェクトに関するカウントやその他の情報は示しません。
モニター:
A モニター、いくつかの条件が真になるの取得へのアクセスや待ち時間にそれらを求めて、オブジェクトに興味のあるスレッドと通信することで、オブジェクトへのアクセスを同期化します。
例: