2009-09-10 2 views
1

많은 잠금을 획득 한 경우 어떻게 원자 세트로 잠금을 해제합니까?Java에서 다중 잠금 해제

+0

어떤 자물쇠가 있습니까? 파일 시스템? 데이터 베이스? 세마포어? 코드를 획득 한 방법이 유용 할 수도 있습니다. – soulmerge

답변

2

잠금은 독립 객체 (this question 참조)로 취급되며 Java 언어는 내 지식으로는 JVM에서 (실제로는 원자 적으로 구현되어야하는) 메소드를 제공하지 않습니다 한 번에 여러 개의 잠금을 사용할 수 없습니다.

어쩌면 몇 가지 잠금 장치의 원자 적 릴리스가 더 이상 필요하지 않도록 응용 프로그램을 다시 디자인 할 수 있습니다. (어쩌면 당신은 우리가 더 나은 이해를 얻을 수있는 특정 문제에 대한 자세한 내용을 줄 수 있습니다)

2

JDK의 java.util.concurrent 패키지 설명을 살펴보십시오. 어쩌면 적절한 동기 primitibe를 찾을 수 있습니다. 귀하의 질문에 대한 정보가 더 구체적인 답변을 제공하기에 충분하지 않습니다.

한 가지 간단한 방법 (하지만 어쩌면 가장 효과적인되지 않음) 필요한 모든 잠금 장치, 예를 보호하기 위해 'uberLock'를 사용하는 것입니다

:

난 당신이 원자를 방출해야 할 것입니다 이유에 대해 의아해 해요
private final Lock uberLock = new ReentrantLock(); 
void lockAll() { 
    uberLock.lock(); 
    try { 
     // call lock() on all needed locks 
    } finally { 
     uberLock.unlock(); 
    } 
} 
5

. 을 원자 적으로 얻는다면, 코드를 작성하는 것이 이상한 짐승이 될지라도 나는 이해할 수 있습니다. 한 가지 확실한 방법은 마스터 잠금 관리자 뒤에있는 모든 코드에서 코드를 숨기고 동기화하는 것입니다. 그러나 어떤 코드가 두 개의 자물쇠가 한꺼번에 릴리스되거나 전혀 릴리스되지 않는다고 걱정합니까?

관련 문제