2016-10-05 6 views
0

나는 액션 Y를하는 모든 클라이언트 Ai (A1, ..., An)를 가지고있다. 그리고 액션 Y를하는 서버 B도있다. 그러나 아무도 X를 실행하지 않는 경우에만 Y가 수행 될 수있다.동기화 된 블록 : 많은 개체 잠금?

그래서 뮤텍스 잠금 장치를 생각합니다. 모든 클라이언트에는 자체 잠금 장치 Li가 있습니다. 그것은 고객에 대한 아무 문제 없지만,이 같은 서버 B, 뭔가 무서운 것 : 이런 종류의 문제에 대한 더 나은 솔루션

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

있습니까?

+1

세마포어 또는 원자 카운터를 사용하여 크로스 서버 작업에 사용합니다. – Antoniossss

+0

세마포어를 사용하는 경우 클라이언트 수로 불확실한 허가 번호를 정확하게 입력해야합니다. – Silver

+0

@Silver 사실이 아닙니다. 당신은 1000 개의 허가를 가진'Semaphore'를 생성 할 수 있고 B는 항상 모든 1000을 획득하려고합니다. 어떤 클라이언트가 체크 아웃했다면 기다려야합니다. – Kayaman

답변

1

모든 노드간에 ReadWriteLock (ReentrantReadWriteLock)을 공유 할 수 있습니다. 서버는 쓰기 잠금을 획득해야하며 모든 클라이언트가 X를 수행하는 것을 차단합니다. 클라이언트는 읽기 잠금을 획득하고 다른 클라이언트는 차단하지 않아야합니다.