1. ホーム
  2. multithreading

[解決済み】セマフォとモニター、何が違うの?

2022-04-03 13:55:01

質問

との大きな違いは何ですか? モニター セマフォ ?

解決方法は?

A モニター は、複数のスレッドからアクセスされるように設計されたオブジェクトです。モニタオブジェクトのメンバ関数やメソッドは相互排他を強制するので、ある時点では1つのスレッドだけがオブジェクトに対して何らかのアクションを実行することができます。あるスレッドがオブジェクトのメンバ関数を実行中の場合、そのオブジェクトのメンバ関数を呼び出そうとする他のスレッドは、最初のスレッドが終了するまで待つ必要があります。

A セマフォ は下位レベルのオブジェクトです。セマフォを使用してモニターを実装することはよくあります。セマフォは本質的には単なるカウンタです。カウンタが正のとき、スレッドがセマフォを取得しようとすると、それが許可され、カウンタがデクリメントされます。スレッドが終了すると、セマフォを解放し、カウンタをインクリメントします。

もし、あるスレッドがセマフォを取得しようとしたときにすでにカウンタが0であれば、他のスレッドがセマフォを解放するまで待つ必要があります。あるスレッドがセマフォを解放したときに複数のスレッドが待っていた場合、そのうちの1つがセマフォを取得する。セマフォを解放するスレッドは、それを獲得したスレッドと同じである必要はありません。

モニターは公衆トイレのようなものです。一度に一人しか入れません。他の人が入ってこないように鍵をかけて、用を足し、出るときに鍵を開けるのです。

セマフォはレンタサイクルのようなものです。自転車の台数は決まっています。もしあなたが自転車を借りようとしたときに、その自転車が空いていれば借りることができますが、そうでなければ待たなければなりません。誰かが自転車を返すと、他の人がそれを使うことができます。自分が持っている自転車を他の人に渡して返してもらえばいい。