3

モニターは、並行環境でのセマフォの問題を解決することになっています。
モニター対セマフォを使用した良いアナロジーを探しています。

類推のための情報を使用してください:
4 つのタスク (TaskA、TaskB、TaskC、TaskD)
1 つの変数varX

各タスクは、何らかのイベントに基づいてvarXを操作したいと考えています。

4

3 に答える 3

7

たくさんの患者が医者に会いに行きたいとしましょう。

セマフォの実装では、全員がオフィスのドアの外に立っており、1 人の患者が出てくるとすぐに、全員が押し入ろうとし、1 人がなんとか入って、残りは再び待たなければなりません。

モニターの実装では、すべての患者が代わりに待合室に送られ、順序の類似性が判断され、1 人の患者が終了すると、別の患者が医師に送られます。

それらは基本的に同じものであり、モニターはセマフォよりも構造化されているだけです。

于 2009-05-07T18:43:14.043 に答える
2

モニターも公衆トイレとして見ることができます。誰かが閉じたトイレのドアに入ると、中の人は他の人がそのスペース(つまりモニター)にいることを望んでいません。他のすべての人 (スレッド) は、トイレの前に列を作って待機する必要があります (wait())。中にいる人が終わって初めて出てきて、次の人が入ることができます。

待っている人の中には、便秘の問題があるかもしれません。明らかな理由から、彼らはトイレを適切に使用する準備ができていない限り、出入りしたくありません。これは、トイレに行く準備ができたことを胃が知らせる (signal()) まで待つ (wait()) 場所です。これが起こる前に、彼らは他の全員を通過させます。

ソース: www.mijnadres.net/published/Monitor%20Object%20Pattern.pdf

于 2012-09-02T01:34:22.297 に答える
1

イベント通知からリソースの競合を分離することが重要です。モニターとセマフォは、共有リソースへのアクセスを制限するために使用されます。モニターは基本的に、カウントが 1 のセマフォです。各タスクが単一の varX にアクセスする必要がある場合は、モニター (または 1 のセマフォ) を使用してそれを保護する必要があります。

Monitor.Enter 
// do something with varX
Monitor.Exit

また

Semaphore.Acquire
// do something with varX
Semaphore.Release

セマフォを使用すると、共有リソースに許可される同時参加者の数を明らかに設定できます。

ニック。

于 2009-07-24T12:37:42.933 に答える