モニターは、並行環境でのセマフォーの問題を解決するはずです。
私はモニターのセマフォーを使って良いアナロジーを探しています。
類推のための情報を使用してください:
4タスク(TaskA、TaskB、TaskC、TaskD)
1変数 VARX
モニターのための良い例/例を探しているセマフォー
の各タスクには、いくつかのイベントに基づいて VARXを操作したいと考えています。
モニターは、並行環境でのセマフォーの問題を解決するはずです。
私はモニターのセマフォーを使って良いアナロジーを探しています。
類推のための情報を使用してください:
4タスク(TaskA、TaskB、TaskC、TaskD)
1変数 VARX
モニターのための良い例/例を探しているセマフォー
の各タスクには、いくつかのイベントに基づいて VARXを操作したいと考えています。
多くの患者さんが医者に行きたいと言っています。
セマフォの実装は、すべてがオフィスのドアの外に立つでしょう。一人の患者が出てくるとすぐに、彼らはすべて握り締めようとします。一人は入ることができ、残りはもう一度待たなければなりません。
モニターの実装は、すべての入室患者が待合室に送られる代わりに、注文の一部が決定され、1人の患者が完了すると、別の患者が医師に送られます。
これらは基本的に同じものですが、モニターはセマフォよりもはるかに構造化されています。
リソースの競合をイベント通知から切り離すことが重要です。モニタとセマフォは、共有リソースへのアクセスを制限するために使用されます。
Monitor.Enter
// do something with varX
Monitor.Exit
または
:モニターは、基本的にその数1である、あなたのタスクのそれぞれは、単一のVARXへのアクセスを取得したい場合は、あなたがお使いのモニタを使用して、それを保護する必要がセマフォ(または1のsempahore)でありますSemaphore.Acquire
// do something with varX
Semaphore.Release
セマフォを使用すると、共有リソースに許可された同時参加者の参加者の数を明示的に設定できます。
ニック。
また、モニターを公共のトイレとして見ることもできます。閉鎖された便器のドアに誰かがいったん入ると、その人は誰もその空間にいないことを望む(すなわち、モニタ)。他のすべての人(スレッド)は、トイレの前に並んで待ってください(待ちます)。内部の人が終わった後で、それが出て来て、次の人が入ることができます。
待っている人の中には便秘の問題があるかもしれません。明白な理由から、彼らはトイレを適切に使用する準備ができていない限り、入ったり戻ったりしたくない。これは、トイレに行く準備ができていることを彼らの胃が(信号())知らせるまで待つ(待機する)場所です。これが起こる前に、彼らは誰もが通過できるようにします。
出典:www.mijnadres.net/published/Monitor%20Object%20Pattern.pdf
私はこれまで、あなたの類推が好きです。 – mrwes
あるいは、セマフォーはドアのロックですが、モニターは部屋全体(ロックで管理)です。同じアイデア、異なる視点。 – Rhamphoryncus