2016-10-05 4 views
0

私は誰もアクションXを行うすべてのクライアントAi(A1、...、An)を持っています。そして、アクションYを実行するサーバーBです。しかし、Yは、誰も実行しない場合にのみ実行できます。同期ブロック:多くのオブジェクトをロックしますか?

私はミューテックスロックを考えます:すべてのクライアントは独自のロックLiを持っています。これは、クライアントのために問題ありませんが、それはこのような何か、サーバBのために恐ろしいようになります。

synchronized(L1){ 
    synchronized(L2){ 
     ... 
    } 
} 

は、この種の問題のために任意のより良い解決策はありますか?

+1

セマフォーまたは原子カウンターを使用してクロスサーバーを使用する場合 – Antoniossss

+0

セマフォーを使用する場合、クライアントの数として不確実な許可の数を正確に指定する必要があります。 – Silver

+0

@シルバー真実ではありません。あなたは1000の許可を持つ 'Semaphore'を作成し、Bは常に1000をすべて取得しようとします。クライアントがチェックアウトしている場合は、それを待たなければなりません。 – Kayaman

答えて

1

ReadWriteLock(ReentrantReadWriteLock)をすべてのノードで共有してみてください。サーバーは書き込みロックを取得し、すべてのクライアントがXを実行するのをブロックします。クライアントは読み取りロックを取得し、他のクライアントをブロックしません。

関連する問題