새 조건 chopstickFree
을 만들었습니다. 내 pickUpChopstick()
메서드에서 잠금을 기다리고 있지만 액세스 할 수 없습니다. 디버깅을 통해 Java - 재진입 성 잠금, 새로 생성 된 조건에 액세스 할 수 없습니다.
pickUpChopstick()
방법에
chopstickFree.await()
라인에 도달 할 때, 그냥
이해가 안 무기한 일시 정지 것을 발견했다? 생성자의 해당 코드는 작동시키려는 확실하지 않은 시도 였지만 어떤 방식 으로든 새로운 조건을 만들었고 모든 것이 자유라는 신호를 보냈지 만 전혀 고정시킬 수는 없었습니다.
public class Chopstick {
Lock lock = new ReentrantLock();
private Condition chopstickFree = lock.newCondition();
private Condition chopstickInUse = lock.newCondition();
Chopstick() {
lock.lock();
chopstickFree.signalAll();
lock.unlock();
}
// Pick up chopstick
public void pickUpChopstick() throws InterruptedException {
lock.lock();
try {
chopstickFree.await(); // ALWAYS PAUSES HERE INDEFINITELY
chopstickInUse.signalAll();
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
lock.unlock();
}
}
// Release chopstick
public void releaseChopstick() {
lock.lock();
chopstickFree.signal();
lock.unlock();
}
}
아이디어가 있으십니까?
건배
무한 정지 만 예외 없음 – mgibson
'젓가락'의 두 가지 인스턴스가있을 가능성이 없으며 신호가 differe에게 발생하고 있습니다. 대기보다 인스턴스가 더 많습니까? – Gray
흠 잘 ArrayList이 있습니다. 두 개의 젓가락이 다른 클래스에 전달되었으며 그 클래스는 pickupLeftChopstick() 메서드를 사용했으며,이 메서드는 Chopstick 클래스의 pickUpChopstick() 메서드를 호출했습니다. –
mgibson