-1

私が必要としているのは、単純なオブジェクトを定義できるシステムです (たとえば、他のメタデータ (IP、MAC アドレスなど) と共に、「オペレーティング システム」および「バージョン」フィールドを持つことができる「サーバー」)。
システムから安全な方法でオブジェクトを要求できるようにしたいと考えています。たとえば、「サーバー」を定義すると、3 つのクライアントが同時に使用でき、4 つのクライアントが同時にサーバーを要求した場合に使用できます。サーバーが解放されるまで待つ必要があります。
さらに、たとえば、ある種のクエリ スタイルでリクエストを実行できる必要がありますallocate(type=System, os='Linux', version=2.6)

言語はそれほど重要ではありませんが、Python が有利です。

私は過去数日間、このようなものをグーグルで探していましたが、何も思いつきませんでした.おそらく、私が知らないこの種のシステムにはもっと良い名前があります.

推奨事項はありますか?

ありがとう!

4

2 に答える 2

0

Javaの場合、この機能を備えた非常に優れた標準ライブラリがあります。

http://java.sun.com/j2se/1.5.0/docs/api/java/util/concurrent/package-summary.html

セマフォフィールドを使用してクラスを作成するだけです。

 class Server {
   private static final MAX_AVAILABLE = 100;
   private final Semaphore available = new Semaphore(MAX_AVAILABLE, true);
   // ... put all other fields (OS, version) here...
   private Server () {}

   // add a factory method
   public static Server getServer() throws InterruptedException {
     available.acquire();
     //... do the rest here
   }

 }

編集:

より「構成可能」にしたい場合は、AOP手法の使用を検討してください。つまり、セマフォベースの同期アスペクトを作成します。

編集:

完全にスタンドアロンのシステムが必要な場合は、セマフォとして行レベルのロックをサポートする最新のDB(PostgreSQLなど)システムを使用してみてください。たとえば、サーバーを表すそれぞれに3つの行を作成し、それらが空いている場合はロックして選択し(たとえば、 " select * from server where is_used = 'N' for update")、選択したサーバーを使用済みとしてマークし、最後にマークを外して、トランザクションをコミットします。

于 2010-01-12T10:23:01.993 に答える
0

「最大 3 クライアント」の例のような同時アプリケーションのリソース制限は、通常、セマフォを使用して実装されます (より正確には、セマフォをカウントします)。

通常、セマフォはいくつかの「カウント」 (そのリソースへの同時アクセスの最大数) で初期化し、クライアントがそのリソースの使用を開始するたびにこのカウンターをデクリメントし、クライアントがそのリソースの使用を終了するとインクリメントします。セマフォの実装により、「インクリメント」および「デクリメント」操作がアトミックになることが保証されます。

セマフォの詳細については Wikipedia を参照してください。私は Python にあまり詳しくありませんが、次の 2 つのリンクが役立つと思います。

于 2010-01-10T11:45:21.153 に答える