관련 이론 및 문법

(데드락 (deadlock) 참고)

http://kkikkodev.tistory.com/138


문제 의도

데드락에 대한 다음의 설명 중 옳은 것을 2 개 고르는 문제입니다.


A. 동시에 두 개 이상의 쓰레드들이 데드락에 걸리는 것이 가능합니다.

B. JVM 은 다수의 쓰레드들이 데드락에 걸리지 않게 하도록 구현되어 있습니다.

C. 데드락된 쓰레드들은 그들의 sleep 메소드를 호출함으로써, 도중에 데드락을 빠져 나올 수 있습니다.

D. 데드락은 wait, notify, notifyAll 메소드들이 잘못 호출되었을 때만 발생합니다.

E. 싱글 쓰레드 프로그램에서, 동기화된 블럭이 잘못 사용되면, 데드락에 걸릴 수 있습니다.

F. 어떤 부분의 코드가 데드락 가능성이 있다면, Thread.yield() 메소드 호출문장을 삽입하여 데드락 가능성을 없앨 수 없습니다.


답안

A, F


풀이 방법

먼저, 보기 A 는, 동시에 여러 동기화된 블럭들이 실행되다가, 데드락에 걸릴 수 있기 때문에 답안이 됩니다. 보기 B 는, JVM 은 데드락을 막아주지 못하므로, 개발자가 신경써서 코딩해야 하므로, 답안 후보에서 제외합니다. 보기 C 는, sleep 메소드는 현재 실행중인 쓰레드를 멈추는 역할만 하지, lock 을 해제하지 않고 그대로 지니고 있기 때문에, 멈춰있는 동안, 다른 쓰레드가 진입할 수 없으므로, sleep 을 통해서는, 데드락을 빠져 나오지 못하게 됩니다. 따라서 C 도 답안 후보에서 제외합니다. 보기 D 는, 데드락은 wait, notify, notifyAll 메소드가 잘못 호출되었을 때 말고도, 많은 상황에서 발생하게 되므로, 답안 후보에서 제외합니다. 보기 E 는, 싱글 쓰레드 프로그램에서는 데드락이 발생될 일이 없기 때문에 답안 후보에서 제외합니다. 보기 F 는, 데드락은 yield 메소드 혹은 wait 메소드로 해결할 수는 있습니다. 하지만, yield 메소드를 통해서 데드락을 처리하자는 것이지, 원천적으로 데드락 발생 가능성 자체를 예방할 수는 없으므로, 이는, 답안이 됩니다.


따라서, 답안은 A 와 F 가 됩니다.


by kkikkodev 2015. 7. 7. 22:39