0

私はこの例でWCFを学ぼうとしてい ます http://www.codeproject.com/Articles/39143/C-WCF-Client-Server-without-HTTP-with-Callbacks-Ma

また、複数のクライアントとの相互排除を追加して、サーバー上の機能を拡張しようとしています。私は基本的に、数値のグローバル配列と、この配列にアクセスできる関数 (Operationcontract で公開されている) を用意しようとしていますが、一度に配列にアクセスできるクライアントは 1 つだけです。

相互排他ロックを使用した単純な機能を追加することで、誰かが私を正しい方向に向けることができますか?

4

1 に答える 1

1

正確に何をしたいのかに応じて、配列にアクセスする関数の周りにロックを配置するのはどうですか (おそらくイベントは配列をシングルトンに入れます)。

その後、あなたが持つことができます

class SingletonClassForYourArray {
   object aLock = new object();
   int yourArray;
   private SingletonClassForYourArray instance;

   public SingletonClassForYourArray GetInstance()
   {
   // normal singleton init of instance on demand
   }

   int [] YourArray 
   {
       get 
       {
           lock(aLock)
           {
               return yourArray;
           }          
       }
   }
}

これは、アレイにアクセスするクライアントを 1 つだけにする最も簡単な方法です。ロックのないすべてのクライアントは順番に待機する必要があります (公平性は保証されません)。クライアントが長時間待たなければならない場合、タイムアウトになる可能性があるので注意してください。

于 2012-09-17T11:34:30.767 に答える