2013-02-06 3 views
3

"H2O 문제"라는 숙제가 있는데 여기에는 3 가지 방법이있는 H2OBarrier라는 클래스를 구현해야합니다.Java의 올바른 잠금/잠금 해제 재 착탈 잠금

  • HReady를 호출하는 방법은 수소 원자 (스레드)
  • OReady 준비가되었을 때, 호출하는 방법은 산소 원자 (스레드)
  • makeWater 준비 될 때 호출 방법 2이 개 수소 원자 및 하나의 산소 원자가 준비되었습니다.

Java 재진입 성 잠금 및 조건을 사용하여이 작업을 수행해야합니다.

이것은 지금까지 제 코드입니다. 제대로 잠금을 사용하고 잠금 해제하고 있는지 궁금합니다.

내 makeWater 메소드 이외의 곳에서 unlock()을 호출해야합니까? 프로그램의 전체 흐름은 나에게 꽤 논리적 인 의미로 보입니다. 나는 전반적으로 올바르게 보이는지 확인하고 싶습니다.

+0

나는 그것을 통과했지만, 나의 OReady 및 HReady 메소드 내에서 unlock()을 호출하면 의미가 있는지 확실하지 않습니다. 아니면 try/catch/finally 문을 사용하지 않았는가? – Hoser

+0

try 블록으로 업데이트했습니다. – Hoser

답변

2

코드가 교착 상태에 빠졌습니다. 원자 5 개가 처음부터 끝나고 5가 대기열로 들어가는 것을 상상해 보라. 이제 2 h 원자가 통과하면 상관 없습니다. 모든 h 원자는 코드 때문에 자동으로 대기합니다.

+0

예, 알 수 있습니다. 캐치를 가져 주셔서 감사합니다. – Hoser