私の仕事は 分散セマフォシステム (説明へのリンク)とそのアプリケーションを実装することです。 Javaソケットを使用し、ウォーターマーク配列と優先キューを使用するので(場所は不明))、このプロジェクトへの取り組み方に興味があります。具体的には、最初の良い目標、つまり実装できる単純なサブシステムが何かはわかっていますが、現時点では、どこに注意を向ければよいかわかりません。
アプリケーションは、フローティングライセンスシステムです。ソフトウェアのコピーが1つしかないコンピューターラボ(CADプログラム)のように、一度に1台のPCのみがソフトウェアを使用できるようにします)のようなものです。 1台のマシンがソフトウェアを使用している場合、ソフトウェアへのアクセスはロックされます。そのマシンを使用して完了すると、そのマシンは放棄され、最初に要求した人が次になります。
参照されている疑似コードアルゴリズムは次のとおりです- http://i.imgur.com/q9kRm.png
「ハンドシェイク」サブシステムから始めることを検討してください。特定のマシンで実行されているライセンスアプリケーションがライセンスサーバーでセッションを登録し、それを一意に識別するトークンを取得して、さらにやり取りできるようにするサブシステムです。
このサブシステムには、追加の通信プロトコルに関する「ネゴシエーション」も含めるのが妥当だと思います(「ハートビート信号は、5〜10秒の速度で交換されると予想されます」など)。
次の論理的なステップはおそらく、「ハートビート」モジュールのようなものを確立することでしょう-登録されたマシンとサーバーに許可するモジュール...おっと、ごめんなさい最初のステップの目標それは適合しません。
一般的な回答
セマフォは、優先キューを介してデッドロックと競合状態を管理するためのリソース割り当て手法です。比喩的に言えば、自転車を3台レンタルできます。先着順で採用するとします。したがって、3台すべての自転車をレンタルし、4人目がそれを要求した場合、そのうちの1人が自転車を返却するまで彼は待たなければなりません。誰かのために自転車を予約したり、誰かがすでに予約した自転車をキャンセルしたりする可能性があります。いくつかのリソースを取得したいプロセスの場合と同様に、セマフォが使用されます。
分散セマフォの場合、複数のプロセスがアクセスできる複数のリソースが存在する可能性があります。サーバーがアプリケーションをホストし、そのアプリケーションの複数のインスタンスをホストでき、ユーザーがアプリケーションを無料で使用できると想定します。サーバーをS1、S2、.. Snとし、アプリケーションをA1、A2、... Anとし、ユーザーをU1、U2、... Unとします。したがって、最初のサーバーがアプリケーションの3つのインスタンスをホストできる場合、S1A1、S1A2、S1A3と表示されます。また、理解しやすいように、アプリケーションインスタンスをスロットまたはボックスとして想定します。スロットは、空いている場合は空であり、ビジーの場合はいっぱいであると見なされます。したがって、この場合、次の方法が推奨されます
推奨リソース
コンテキスト内の質問に対する具体的な回答
コードを見ると、私はセマフォのクラシックバージョンを好みます。 Javaには、これを行うための組み込みの semaphore パッケージがあり、簡単にビルドできます。
具体的には、最初の目標として何が良いのか、または実装できる簡単なサブシステムについて知りたいのですが。
アプリケーションの1つのインスタンスのみをLANで実行する必要があると想定
次の警告は考える価値があります
理解を深めるために、次のことをお勧めします
[〜#〜] edit [〜#〜]元の回答はより広い視野に基づいているため、完全に編集された回答