다시 잠금 및 비재잠금

2328 단어

1. What


다시 들어갈 수 있는 자물쇠, 즉 귀속 자물쇠라고도 부른다. 같은 라인 T가 외부 함수 A에 들어가 자물쇠 L을 얻은 후에 T가 내부 귀속 함수 B에 계속 들어갈 때 이 자물쇠 L을 획득하는 코드가 있고 자물쇠 L을 방출하지 않은 상황에서 이 자물쇠 L을 반복해서 획득할 수 있다.다시 들어갈 수 없는 자물쇠는 자전거 자물쇠라고도 부른다. 위에서 말한 바와 같이 같은 라인 T가 외부 함수 A에 들어가 자물쇠 L을 얻은 후에 T가 내부 귀속 함수 B에 계속 들어갈 때 이 자물쇠 L을 얻은 코드가 있다. 반드시 함수 A에 들어간 자물쇠 L을 먼저 풀어야 함수 B에 들어간 자물쇠 L을 얻을 수 있다.

2. 데모


2.1 잠금 재설정 불가능:

public class UnReentrantLock {
    private boolean isLocked = false;
    public synchronized void lock() throws InterruptedException {
        while (isLocked) {
            wait();
        }
        isLocked = true;
    }

    public synchronized void unlock() {
        isLocked = false;
        notify();
    }
}
public class Count {
    UnReentrantLock lock = new UnReentrantLock();

    public void outer() throws InterruptedException {
        lock.lock();
        inner();
        lock.unlock();
    }

    public void inner() throws InterruptedException {
        lock.lock();
        System.out.println("call inner");
        lock.unlock();
    }
}
public class LockTest {
    @Test
    public void testUnReentrantLock() throws InterruptedException {
        Count count = new Count();
        //   inner() ,       ,     ,     
        count.print();
    }
}

2.2 잠금 재입력 가능

public class Lock{
    boolean isLocked = false;
    Thread  lockedBy = null;
    int lockedCount = 0;
    public synchronized void lock()
        throws InterruptedException{
        Thread callingThread = Thread.currentThread();
        while(isLocked && lockedBy != callingThread){
            wait();
        }
        isLocked = true;
        lockedCount++;
        lockedBy = callingThread;
  }
    public synchronized void unlock(){
        if(Thread.curentThread() == this.lockedBy){
            lockedCount--;
            if(lockedCount == 0){
                isLocked = false;
                notify();
            }
        }
    }
}

리셋 가능한 자물쇠는 자물쇠를 가진 라인 대상과 자물쇠 계수를 사용하여 이루어진 것으로 리셋 가능한 자물쇠가 아닌 것은 판단 조건이 자물쇠 계수에 불과하고 자물쇠 계수<=1에 해당한다.

2.java의 리셋 가능한 자물쇠


ReentrantLock, synchronized 등

3. 왜 이런 물건을 만들었을까


다시 들어갈 수 있는 자물쇠는 자물쇠가 사라지는 것을 방지할 수 있다.

좋은 웹페이지 즐겨찾기